[其他ST产品] 更改定时器中断函数中的flag的值后,程序跑飞了,是什么原因?

[复制链接]
1451|32
 楼主| powerantone 发表于 2023-9-26 11:06 | 显示全部楼层 |阅读模式

芯片用的是stm32f407igt6,开发环境是cubeide
具体问题如下:
        在TIM7的中断函数里,通过改变flag的值,控制单片机执行不同的函数。flag=0执行函数1,flag=1执行函数2。
        用cubeide debug的时候,在观察窗切换flag的值,中断执行十多二十次之后,就跑飞了!并且无法改变flag的值。
        在cubeIDE里按暂停或者停止都没有响应,先按了停止再按暂停,IDE才会停下来并且报错。
求问是什么原因。。
函数2里程序比较多,正常执行的话需要30多us,TIM7中断的周期设置成100us,按理说也不应该算不完啊。。
因为最小系统板是自己设计的,不排除硬件上的问题。但之前用keil调试时都没有出现类似的情况。。。
求大佬解答
香水城 发表于 2023-9-26 14:40 | 显示全部楼层
这个最好结合代码看看。

你把flag设置volatile型全局变量,在主程序里对它判断再调用相关函数会怎么样?
MessageRing 发表于 2023-9-30 20:04 | 显示全部楼层
试试把编译器优化调低点
stormwind123 发表于 2023-10-8 10:20 | 显示全部楼层
如果flag变量的数据类型与中断函数中使用的数据类型不匹配,可能会导致程序崩溃或跑飞。
probedog 发表于 2023-10-8 10:21 | 显示全部楼层
可能是中断函数的优先级设置不正确
classroom 发表于 2023-10-8 10:21 | 显示全部楼层
如果中断函数在处理期间发生了另一个中断,可能会导致中断嵌套。在这种情况下,第二个中断可能会在第一个中断处理程序完成之前被延迟执行。这可能会导致程序状态不一致,从而导致程序跑飞。确保在中断处理程序中正确地处理中断嵌套的情况。
Henryko 发表于 2023-10-10 13:18 | 显示全部楼层
跑飞大概率还是自己程序的问题
AloneKaven 发表于 2023-10-10 17:35 | 显示全部楼层
类型不匹配吗?
Stahan 发表于 2023-10-11 20:35 | 显示全部楼层
发出代码来看看
一只眠羊 发表于 2023-10-16 20:03 | 显示全部楼层
是不是哪里的变量导致进不到定时器里了啊
chenjun89 发表于 2023-10-16 20:27 来自手机 | 显示全部楼层
flag是定义的什么变量类型,局部变量还是全局变量?
未说出口的像你 发表于 2023-10-16 22:30 | 显示全部楼层
这个不好说啊,看你的变量怎么变化的呗
在曼谷的春 发表于 2023-10-17 01:00 | 显示全部楼层
就是flag怎么改变的?是通过定时器来回切换的?
我吃小朋友 发表于 2023-10-17 03:30 | 显示全部楼层
是不是你的函数1执行超时了,此时改变flag之后就不能执行函数1,也不能执行函数2了?
月亮一键变蓝 发表于 2023-10-17 06:00 | 显示全部楼层
不懂,你是想用定时器来切换2段代码的运行方式?
失物招領 发表于 2023-10-17 08:00 | 显示全部楼层
我觉得你可以看看你的flag怎么变化的,就是用什么方式被赋值
她已醉 发表于 2023-10-17 11:00 | 显示全部楼层
你弄个修饰词我觉得能靠谱点?
将爱藏于深海 发表于 2023-10-17 13:00 | 显示全部楼层
给个初始值吧,flag,是不是OK一些
春日负喧 发表于 2023-10-17 15:00 | 显示全部楼层
那你说cubeIDE上有这样情况,keil没有?
温室雏菊 发表于 2023-10-17 22:00 | 显示全部楼层
是不是编译器的优化等级搞的鬼啊?或者是编译器的问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

679

主题

4019

帖子

4

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