单片小菜 发表于 2021-7-12 12:54

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


这里为什么说定时器初始化要放在消息队列后面?

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()断言函数中

这样就是调试的过程,系统卡死了。
页: [1]
查看完整版本: 为什么定时器初始化要放在消息队列的后面,而不是前面?