打印
[应用相关]

程序总是跑飞,原因可能是什么???

[复制链接]
901|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里用时钟计数器,然后根据时钟频率推算时间。

使用特权

评论回复
5
zyj9490| | 2015-9-27 22:26 | 只看该作者
应是中断冲突的问题,I2C是硬件操作的吧,能否用时间分配任务型,可正常工作,因为全部任务都作主机使用的.

使用特权

评论回复
6
Roderman_z| | 2015-9-28 07:58 | 只看该作者
有没有单步调试过呢

使用特权

评论回复
7
643757107| | 2015-9-28 08:39 | 只看该作者
跑飞,要看主函数了。

使用特权

评论回复
8
643757107| | 2015-9-28 08:39 | 只看该作者
可能是指针使用错误,出界了。

使用特权

评论回复
9
玛尼玛尼哄| | 2015-9-28 08:54 | 只看该作者
查看一下指针的使用吧。

使用特权

评论回复
10
gejigeji521| | 2015-9-28 11:54 | 只看该作者
应是中断冲突的问题

使用特权

评论回复
11
布谷鸟2015|  楼主 | 2015-9-29 12:30 | 只看该作者
zyj9490 发表于 2015-9-27 22:26
应是中断冲突的问题,I2C是硬件操作的吧,能否用时间分配任务型,可正常工作,因为全部任务都作主机使用的. ...

嗯嗯,我看看,估计就是这个问题啊/!!!

使用特权

评论回复
12
布谷鸟2015|  楼主 | 2015-9-29 12:31 | 只看该作者
643757107 发表于 2015-9-28 08:39
可能是指针使用错误,出界了。

应该不会吧!

使用特权

评论回复
13
734774645| | 2015-9-29 14:13 | 只看该作者
程序跑飞一般跟指针溢出有关吧

使用特权

评论回复
14
643757107| | 2015-10-9 11:21 | 只看该作者
到底是什么问题,解决了没有。我还没遇到过跑飞呢,

使用特权

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

本版积分规则

18

主题

189

帖子

0

粉丝