中断嵌套里优先级有多重要

前段时间在调试一个通信项目代码时卡壳,查出来是中断优先级配置不正确的问题,记录下,共勉...

问题:程序卡死在延时等待上不运行

分析:在原厂的例程上修改,中断里直接进行了数据的接收发送分包等处理。 而关键是在处理过程中调用的函数层级比较深以至于不记得现在是在中断程序里执行(还是在Debug的Call Back中发现是中断调用的),有一个错误情况被我处理为关闭模块电源等待一段时间再复位芯片工作,这里的等待时间我简单处理为了绝对延时卡住程序,如图:

正是这个while导致程序跑不下去,发现等待的值uwTick没有递增,而这个值是在SysTick中断里被++的,这下知道了——程序没有到SysTick执行,因为SysTick中断和通信处理的中断优先级相同,不能被同级的嵌套打断,修改SysTick优先级后正常运行了。

体会:中断程序里调用函数时,使用到了其他中断会修改的变量,嵌套中要格外注意,防止程序变量之间条件互相等待而死锁。

发布了22 篇原创文章 · 获赞 29 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Emmy_kanly/article/details/95311396