新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2019-10-15
- 在线时间
- 10 小时
|
10金钱
我在一个定时器中设置了3个不同的时间间隔,然后在三个时间间隔更新3个不同的标志位。主循环里查询这三个标位来处理事件函数,这三个函数都是对SIM模块发送指令的。现在问题是主程序会出现程序跑死的问题。可以麻烦大家帮我看一下程序问题是在哪里吗? 第一段代码是定时器中断处理函数。 分别更新了ReadAdxl345 、QueryDefenceInfoFlag和AddGpsInfoFlag这3个标志位。 第二段是主循环中根据标志位调用的事件函数。主循环中调用的send_message函数时查询的ReportLater变量是根据ReadAdxl345 变化的。
- void TIM3_IRQHandler(void){ //TIM3中断处理函数
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){ //判断是否是TIM3中断
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
- time50ms++;
- timer2Count1++;
- timer3DefenceCount++;
- if(time50ms%5==0)
- {
-
- <font color="#ff0000"><b> ReadAdxl345</b></font> =1;
- if(time50ms%10==0)
- sendDataFlag =1;
- if(time50ms%20==0)
- {
- ReportLater++;
- KeyLater++;
- }
- }
- UartBusy++; //5次未处理
- if(UartBusy>=6) //50ms处理一次
- {
- ReadFlag=1;
- }
- if(timer3DefenceCount==201) //每10秒查询一次围栏信息
- {
- timer3DefenceCount=0;
- <font color="#ff0000"><b> QueryDefenceInfoFlag</b></font>=1;
- }
- if(timer2Count1==401) //每20秒发送一次GPS定位数据
- {
- timer2Count1=0;
- <b><font color="#ff0000"> AddGpsInfoFlag</font></b>=1;
- }
-
-
- }
- }
复制代码- while(1)
- {
- lenx++;
- if(ReadAdxl345== 1) //定时读取adxl345数据
- {
- test_X();
- }
- if(ReportLater>=15) //15s
- {
- <font color="#006400"><b> send_message();</b></font>
- }
-
- if(KEY1==0) //按键处理
- {
- delay_ms(3); //按键消抖动
- if(KEY1 ==0) //按键处理
- {
- ReportLater=0; //按键延时上报
- KeyLater=0; //按键延时处理
- }
- }
-
- if(AddGpsInfoFlag==1){
- AddGpsInfoFlag=0;
- <font color="#008000"><b> AddGpsInfoRequest();</b></font>
- }
-
- if(QueryDefenceInfoFlag==1){
- QueryDefenceInfoFlag=0;
- <font color="#008000"><b> QueryDefenceInfo();</b></font>
-
- }
- }
复制代码
|
|