[RTOS] 为什么定时器初始化要放在消息队列的后面,而不是前面?

[复制链接]
3079|6
 楼主| 单片小菜 发表于 2021-7-12 12:54 | 显示全部楼层 |阅读模式
7463860ebcacada625.jpg
106160ebcacb35c89.png 这里为什么说定时器初始化要放在消息队列后面?
ArterySW 发表于 2021-7-13 19:25 | 显示全部楼层
因为在定时器中断内会向消息队列里发送消息,如果在创建消息队列之前就启动了定时器,由于定时器中断来的比较快,这时消息队列又还没创建,OS就会死了。
自己造声卡 发表于 2021-7-14 16:25 | 显示全部楼层
OS是否可以死掉,可以判断出来吗?或者软件跳转出来。
hejun96 发表于 2021-7-14 18:59 | 显示全部楼层
ArterySW 发表于 2021-7-13 19:25
因为在定时器中断内会向消息队列里发送消息,如果在创建消息队列之前就启动了定时器,由于定时器中断来的比 ...

最近正好在F403A上用MessageQueue
ArterySW 发表于 2021-7-14 19:46 | 显示全部楼层
自己造声卡 发表于 2021-7-14 16:25
OS是否可以死掉,可以判断出来吗?或者软件跳转出来。

你可以动手调试一下看看
里面有晴雨 发表于 2021-7-16 09:07 | 显示全部楼层
这个怎么调试,我也遇到相同的问题,不知道怎么搞比较好一些。
ArterySW 发表于 2021-7-16 09:28 | 显示全部楼层
里面有晴雨 发表于 2021-7-16 09:07
这个怎么调试,我也遇到相同的问题,不知道怎么搞比较好一些。

第一步:不改变源程序将程序下载到AT32 MCU中,运行。可以看到代码运行ok
第二步:将定时器初始化这一句代码挪到main函数中,比如GPIO_TOGGLE_Init()后面
第三步:进入调试模式,运行,可发现代码卡死在了xQueueSendFromISR()函数中的configASSERT()断言函数中

这样就是调试的过程,系统卡死了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:资深专家
简介:丰富的嵌入式软硬件开发管理经验; 丰富的项目管理经验并具备敏锐的市场嗅觉; 丰富的产品的供应链资源及工厂管控能力; 具备很强的产品落地经验(从产品企划到产品量产);

107

主题

2354

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部