你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

运行一段时间后“死机”,再深入观察,看到定时器4中断服务程序不再执行,看了《Cortex-M3权威指南(中文)》仍无法定位原因?

[复制链接]
13530875826 提问时间:2024-8-11 00:08 / 未解决
阅读主题, 点击返回1楼
收藏 评论18 发布时间:2024-8-11 00:08
18个回答
13530875826 回答时间:2024-8-13 23:12:36

xmshao 发表于 2024-8-13 14:38
不用着急。</p>
<p>看看你到底开启了哪些中断,看看是否有在中断里需被使用的变量,因为中断优先级方面的原 ...

[md]SV,PendSV,SysTick系统自动设置其使能且优先级为0s0。 我自己的代码,优先级组2,USART1为3s3,TIM4为0s3,EXTI9_5_IRQn为1s1,EXTI15_10_IRQn为1s1。 TIM4中断程序中,更新70ms变量标记;EXTI中断程序中,更新编码器数值;main中,读取70ms变量标记值和编码器数值。都只是变量读写,没有看出死锁。 死马当活马医,尝试把上面几个中断的优先级统一设为0s0,居然不死机了! 再试,优先级统一设为1s0,还是死机。 再试,我虽然USART1、EXTI设置有使能中断,但没插串口、没插编码器,不会有中断吧?打断点,确实没有USART1、EXTI的中断,只有TIM4中断在跑。 中断的优先级统一设为0s0不死机,设为1s0会死机,这是为什么呢?

13530875826 回答时间:2024-8-13 23:32:26

13530875826 发表于 2024-8-13 23:12
SV,PendSV,SysTick系统自动设置其使能且优先级为0s0。
我自己的代码,优先级组2,USART1为3s3,TIM4 ...

[md]教训: 1、EXTI等中断虽然没跑,但优先级不能随便。 2、搞不清原因,不妨先把全部中断的优先级统一设为0s0或0s1试试。 问题暂时规避了,但根本原因还是不清不楚啊。

xmshao 回答时间:2024-8-14 09:50:57

13530875826 发表于 2024-8-13 23:12
SV,PendSV,SysTick系统自动设置其使能且优先级为0s0。
我自己的代码,优先级组2,USART1为3s3,TIM4 ...

[md]优先级统一一样了,说明各个中断不能彼此打断和嵌套了。问题应该是中断嵌套后导致的,具体你后面有时间再对着代码再研究吧。

Enoch11 回答时间:2024-8-17 11:00:48

可能中断处理时间过长,一次没处理完就进下一次了

12
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版