[应用相关] 程序总是跑飞,原因可能是什么???

[复制链接]
1202|13
 楼主| 布谷鸟2015 发表于 2015-9-27 22:12 | 显示全部楼层 |阅读模式
AN, TI, TE, se, ge
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
}
我用两路 IIC 分别测出角加速度和陀螺仪的数据,每10ms进入一次中断,中断中对数据经行处理,并通过usart发送数据。但是程序总是跑飞,原因可能是什么。
boy1990 发表于 2015-9-27 22:17 | 显示全部楼层
在中断服务程序入口设断点,然后单步运行。界面里应该有时钟计数器,用这个计数器可以知道运行一段程序所花时间。另外,界面里应该有堆栈观察窗口,可以看堆栈是否溢出。。。
会飞の鱼 发表于 2015-9-27 22:20 | 显示全部楼层
我个人觉得是中断重入的结果就是堆栈溢出,系统崩溃——程序就跑飞了。
毁灭2012 发表于 2015-9-27 22:26 | 显示全部楼层
其实最好的办法还是在Simulation里用时钟计数器,然后根据时钟频率推算时间。
zyj9490 发表于 2015-9-27 22:26 | 显示全部楼层
应是中断冲突的问题,I2C是硬件操作的吧,能否用时间分配任务型,可正常工作,因为全部任务都作主机使用的.
Roderman_z 发表于 2015-9-28 07:58 | 显示全部楼层
有没有单步调试过呢
643757107 发表于 2015-9-28 08:39 | 显示全部楼层
跑飞,要看主函数了。
643757107 发表于 2015-9-28 08:39 | 显示全部楼层
可能是指针使用错误,出界了。
玛尼玛尼哄 发表于 2015-9-28 08:54 | 显示全部楼层
查看一下指针的使用吧。
gejigeji521 发表于 2015-9-28 11:54 | 显示全部楼层
应是中断冲突的问题
 楼主| 布谷鸟2015 发表于 2015-9-29 12:30 | 显示全部楼层
zyj9490 发表于 2015-9-27 22:26
应是中断冲突的问题,I2C是硬件操作的吧,能否用时间分配任务型,可正常工作,因为全部任务都作主机使用的. ...

嗯嗯,我看看,估计就是这个问题啊/!!!
 楼主| 布谷鸟2015 发表于 2015-9-29 12:31 | 显示全部楼层
643757107 发表于 2015-9-28 08:39
可能是指针使用错误,出界了。

应该不会吧!
734774645 发表于 2015-9-29 14:13 来自手机 | 显示全部楼层
程序跑飞一般跟指针溢出有关吧
643757107 发表于 2015-10-9 11:21 | 显示全部楼层
到底是什么问题,解决了没有。我还没遇到过跑飞呢,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

189

帖子

0

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