查看: 8517|回复: 25

[原创] FRDM-K64F第四话【以LPTMR触发KSDK使用注意事项】

[复制链接]

该用户从未签到

24

主题

364

帖子

0

高级会员

Rank: 4

积分
760
最后登录
2021-4-2
发表于 2015-6-15 18:12:42 | 显示全部楼层 |阅读模式
本帖最后由 guo8113 于 2015-10-17 21:39 编辑

不得不说,Freescaleksdk对于懂点MCU的小白其实是很好用的,以LPTMR为例如图所示,实现周期性延时并执行回调函数,不用去管寄存器初值、重装、中断等等一系列嵌入式中的issue,只需要几个API,注册回调OK.

1.PNG

     但是我在使用的时候遇到了一个问题,同样的语句,如果我把LPTMR的设置与初始化拿到一个函数里实现时(如图2),遇到了神奇的hardfault
2.PNG
     真是百思不得其解,然后我把函数设置为inline,OK了。后来分析了下代码,问题出在lptmr_state_t这个鬼上。
typedef struct LptmrState {
   lptmr_callback_t userCallbackFunc; /*!< Callbackfunction that is executed in ISR. */
   uint32_t prescalerClockHz;
} lptmr_state_t;
/*! @brief Table to save pointers tocontext data. */
extern lptmr_state_t *g_lptmrStatePtr[LPTMR_INSTANCE_COUNT];
       在驱动的实现中发现,LPTMR驱动通过全局的指针(lptmr_state_t *g_lptmrStatePtr[LPTMR_INSTANCE_COUNT];)来管理芯片上所有的LPTMR,既然是指针,如果lptmr_state_t类型的变量是局部变量,那么出了它的领地,就被干掉了,驱动自然无法按预期运行。
       因此需要将lptmr_state_t类型的变量声明为static为妙
       当然其他的驱动模块也一样,都需要注意这一点。
回复

使用道具 举报

  • TA的每日心情
    开心
    2018-8-30 16:02
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    1065

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1851
    最后登录
    2019-11-19
    发表于 2015-6-15 20:18:27 | 显示全部楼层
    好高深的样子!
    lptmr_state_t不是一个类型吗?怎么成变量了
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
    发表于 2015-6-15 23:56:28 | 显示全部楼层
    学习学习!!
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-6-16 08:30:35 | 显示全部楼层
    kingsings 发表于 2015-6-15 20:18
    好高深的样子!
    lptmr_state_t不是一个类型吗?怎么成变量了

    求解答...
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24

    主题

    364

    帖子

    0

    高级会员

    Rank: 4

    积分
    760
    最后登录
    2021-4-2
     楼主| 发表于 2015-6-16 10:40:42 | 显示全部楼层
    kingsings 发表于 2015-6-15 20:18
    好高深的样子!
    lptmr_state_t不是一个类型吗?怎么成变量了

    这个类型的变量,说的不准确。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-22 09:09
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    24

    主题

    446

    帖子

    0

    高级会员

    Rank: 4

    积分
    876
    最后登录
    2019-3-8
    发表于 2015-6-16 16:32:14 | 显示全部楼层
    是这么个意思吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24

    主题

    364

    帖子

    0

    高级会员

    Rank: 4

    积分
    760
    最后登录
    2021-4-2
     楼主| 发表于 2015-6-16 17:02:38 | 显示全部楼层
    digua96 发表于 2015-6-16 16:32
    是这么个意思吗

    什么意思。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30

    主题

    487

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1214
    最后登录
    2020-8-18
    发表于 2015-6-18 01:40:23 | 显示全部楼层
    楼主给的感觉好高大上  ,瞬间感觉自己比小白还要小白0.0
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-4 16:56
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    602

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1842
    最后登录
    2020-8-25
    发表于 2015-6-19 19:21:33 | 显示全部楼层
    static就会变成真正局部的。不要乱动原厂代码。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24

    主题

    364

    帖子

    0

    高级会员

    Rank: 4

    积分
    760
    最后登录
    2021-4-2
     楼主| 发表于 2015-6-26 10:37:59 | 显示全部楼层
    已有更新,晚些时候开贴总结。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 11:23 , Processed in 0.120858 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表