STM32 – 关于在中断里使用delay的问题

不要在中断里用delay

昨天晚上睡前突然想起来这个,防为止以后遇到相同问题不记得解决方案故记录。

问题描述:校电赛时候的问题,我需要在触发一定条件的时候调用中断回调,驱动sim模块发送短信,但是这个短信是以指令形式发送的,也就是指令与指令直接需要一定等待时间,但是直接使用delay会导致程序宕机

尝试方案:

  1. 加一个flag,第一次进入发短信部分的时候置为1,发完了置为0,如果已经是1就不进入发短信部分
  2. 用一个不定长的接收来替代delay

都不可行。

原因分析:中断的优先级问题,当一个条件反复触发的时候,会多次进入中断回调函数,后来的中断会打断先来的中断,导致程序无法进行下去。

解决方法:

  1. 不要在中断里用delay。这也是实际上的解决方案。
  2. 改一下优先级,把sim模块发短信的部分的优先级调高,这样就打断不了了。

一条评论

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注