完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好,我用两路 IIC 分别测出角加速度和陀螺仪的数据,每10ms进入一次中断,中断中对数据经行处理,并通过usart发送数据。但是程序总是跑飞,原因可能是什么。下面是我中断的代码。
void tiM2_IRQHandler(void) { if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) { TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); GetAngle(); } } void GetAngle(void) { LX_Val.Angle+=(LX_Val.Acc)*dt; Angle_delta=(MZ_Val.Angle-Real_angle)*Tg; Real_angle+=(LX_Val.Acc+Angle_delta)*dt; #if 1 SendDate('1',LX_Val.Angle,100) ; SendDate('2',MZ_Val.Angle,100) ; SendDate('3',Real_angle,100) ; #endif } |
|
相关推荐
13个回答
|
|
|
|
|
|
对不起,我接触的很少,怎么去判断堆栈有没有溢出,还有中断程序时间我也不了解怎么测它长度,这两个问题比较白痴,对不起
|
|
|
|
在中断服务程序入口设断点,然后单步运行。界面里应该有时钟计数器,用这个计数器可以知道运行一段程序所花时间。另外,界面里应该有堆栈观察窗口,可以看堆栈是否溢出。。。 如果中断处理程序所花时间(包括被其他更高优先级的中断所占时间)太长,那么在中断处理程序还没运行结束的时候就有可能再次进入中断。。。中断重入的结果就是堆栈溢出,系统崩溃——程序就跑飞了。 评分
|
||
1 条评论
|
||
谢谢你的耐心解答,你说的中断时间的测试,我只能在simlation下测试,但是不能再 emulation下测试,我想问一下有没有其他的办法实时真正的测量出这段时间,可以用示波器吗?堆栈的问题应该是没有溢出的,我的问题好像找到答案了,应该是我陀螺仪板上的地接触不良引起的。 |
|
|
|
测试中断运行时间的方法:1) 读单片机内定时器的值,进入中断时读一次,退出中断时读一次,将差值输出。 2) 用一个IO口做指示,进入中断是拉高,退出中断时拉低,用示波器测脉宽。 其实最好的办法还是在Simulation里用时钟计数器,然后根据时钟频率推算时间。 |
|
|
|
学习喽
|
|
|
|
感谢你的指导!!! |
|
|
|
|
|
|
|
解答过程很详细
|
|
|
|
我是菜鸟,觉得上面的解答很好,就想问下怎么通过堆栈观察窗口观察堆栈是否溢出呢?
|
|
|
|
Jack315 发表于 2014-4-24 00:19 这程序值得深入探讨研究一下 这么长 坐等大神来解答 |
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1252 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1184 浏览 3 评论
2263 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1351 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1774 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 08:17 , Processed in 0.821141 second(s), Total 78, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号