打印

【求助】stm32程序跑飞,只有中断程序运行

[复制链接]
5975|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
droper|  楼主 | 2012-4-5 13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是stm32l151r8t6,用timer2定时中断读取和计算加速度计的数值,有浮点运算,都在中断程序里完成。现在是如果timer2中断服务程序里什么都不做,程序能正常运行,但是把读取和计算的程序加进去后,运行几分钟后,程序就跑不回主程序了,这个时候根据我设的标记,只有timer2中断程序在运行,而读取加速度计和计算的程序在F系列的arm里是没有问题的,求高手解答啊
沙发
1234sufei| | 2012-4-5 15:14 | 只看该作者
你把读取和计算的程序加进去的话  估计执行时间太长了  这样就跳不出中断了   一直执行中断去了  你可以设一个中断标记位了   中断一到了  你就可以设置标志位为1   然后在主函数中执行了

使用特权

评论回复
板凳
droper|  楼主 | 2012-4-5 15:49 | 只看该作者
2# 1234sufei
我测过调用一次计算程序的时间大概是2ms左右,而我用的中断是400ms,所以应该不可能一直嵌套的,放到主程序的思路,我现在用了,基本可以。但是就是中断这个还是没找到原因,我为了测试又开了一个更低优先级的timer6定时中断,timer6的中断子函数可以运行,所以我觉得timer2的中断子函数并没有一直占有系统资源的~

使用特权

评论回复
地板
香水城| | 2012-4-5 16:11 | 只看该作者
一般浮点运算都是通过调用子函数完成的,如果你的主程序中也用到了浮点运算,当主程序中正在进行浮点运算时,就构成了浮点运算子函数的重入,这样就会出问题造成主程序的混乱。

使用特权

评论回复
5
droper|  楼主 | 2012-4-5 17:08 | 只看该作者
4# 香水城
主程序就
while(1)
{
     Delayms(500);
     myPrintf("m\n");//用来做指示用
}
没有浮点运算的

使用特权

评论回复
6
香水城| | 2012-4-5 17:18 | 只看该作者
你能确定myPrintf()中没有浮点运算吗?

另外一个可能的方向是看看堆栈是否溢出。

使用特权

评论回复
7
droper|  楼主 | 2012-4-5 17:38 | 只看该作者
6# 香水城
没有,myPrintf()就是一个串口发送函数,里面没有运算,就调用了usartsend函数,堆栈溢出这个有可能啊,我再试试,堆栈我直接用的是原始启动文件里的没修改过呢

使用特权

评论回复
8
droper|  楼主 | 2012-4-5 19:26 | 只看该作者
6# 香水城
还有个问题,怎么选择合适的堆栈大小呢?谢谢城主啊~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

0

粉丝