F407中全局变量值不稳定

2019-07-21 02:08发布

我在usart.c中定义了全局变量vu8 flag;在usart.h中声明为 extern vu8 flag;然后在usart.c中的串口中断处理函数中根据串口接收到的值来修改flag变量的值,
代码示意如下:(......表示其他代码省略)
void usart_hander()
{
   ........
   receive_data();
   .........
}
receive_data()
{
  u8 res;
  res=USART_ReceiveData(USART6);
  switch(res)
     case 0: flag=0;break
     case 1: flag=1;break;
     default:  flag=0;break;
  ...............................
}
然后在包含了usart.h的main.c中的主函数main()中扫描此标志
void main()
{
while(1)
 {
 if(flag==1)   {do a;}
 else {do b;}
 }
}
程序全速运行时用串口调试助手向串口发送数据1后发现main函数中只执行一次do a后flag值就变为0了,当在 receive_data();后加上延时函数delay_us(200);
后才flag的值才能一直稳定为1,而且这个延时最小为200us,小了就没用。此工程中就跑了这一个线程,为何全局变量赋值后稳定不下来,需要延时后才能稳定下来,难道是F407保存一个全局变量的值需要200us?这也太慢了吧,还是其他问题,求解。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
腾飞
1楼-- · 2019-07-21 05:35
 精彩回答 2  元偷偷看……
洞庭小生
2楼-- · 2019-07-21 10:49
回复【2楼】腾飞:
---------------------------------
上面结果就是仿真下得出的啊,你说的这些手段我都试过了,flag的值就是在接受完数据后的值(接收完后就不再进入串口接收处理中断函数了),重点是为何延时后值就稳定了,do a是个伪c语句,上面说了是示意代码,不是真实代码。
腾飞
3楼-- · 2019-07-21 12:40
那我就不知道了,
 试试把keil的优化级别设为0.
正点原子
4楼-- · 2019-07-21 13:46
 精彩回答 2  元偷偷看……

一周热门 更多>