打印
[应用相关]

写程序时遇到的一个问题

[复制链接]
3006|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alsort|  楼主 | 2016-2-15 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家新年快乐

最近调试时突然出现一种奇怪的现象(bug)

定义全局变量flag(char类型)声明时赋值为0

串口通信接收一串数据成功后flag变为1,主程序中轮询if(flag)。

带仿真器跑一切正常

上电自己跑的时候会出现没有串口通信也会执行if(flag)条件内语句

通过IO监测,出现上述情况时flag并未在串口中断中被赋值为1

各位帮忙分析下

有避免的方法就是if(flag==0x55……)加强判断复杂性!

但治标不治本,请大神帮忙!

沙发
wyde518| | 2016-2-15 17:26 | 只看该作者
本帖最后由 wyde518 于 2016-2-15 17:27 编辑

串口通讯成功flag=0X55, 主程序中if(flag==1)看看什么情况,此目的是为了排除flag在其他地方使用.   
还有你在什么地方复位的FLAG

使用特权

评论回复
板凳
alsort|  楼主 | 2016-2-15 17:43 | 只看该作者
wyde518 发表于 2016-2-15 17:26
串口通讯成功flag=0X55, 主程序中if(flag==1)看看什么情况,此目的是为了排除flag在其他地方使用.   
还 ...

if条件进入后复位flag

反复查了下程序和变量存储位置,没有在别的地方使用了

就是 生效 判断 复位

使用特权

评论回复
地板
maiweiqi| | 2016-2-15 18:06 | 只看该作者
如果你没有在其他地方用到flag的话,那应该是某个指针越位了,指到了flag的地址,然后把flag更改了。

使用特权

评论回复
5
alsort|  楼主 | 2016-2-15 18:19 | 只看该作者
maiweiqi 发表于 2016-2-15 18:06
如果你没有在其他地方用到flag的话,那应该是某个指针越位了,指到了flag的地址,然后把flag更改了。 ...

这种情况在每次上电时随机出现,如果是指针越位,是代码问题吗

使用特权

评论回复
6
ccw1986| | 2016-2-15 19:44 | 只看该作者
指针用的有问题吧,可能是越界了

使用特权

评论回复
7
玄德| | 2016-2-15 22:14 | 只看该作者

地板说的情况很有可能。


使用特权

评论回复
8
lemonboard| | 2016-2-15 22:16 | 只看该作者
这种情况出现后调试有些麻烦!
建议通过该变量内存写入时触发中断的方式来调试

使用特权

评论回复
9
ticomi| | 2016-2-16 09:12 | 只看该作者
将flag变量的声明前加上__IO试试!!

使用特权

评论回复
10
eydj2008| | 2016-2-16 09:37 | 只看该作者
我分析 好像是被优化掉了一样。 你要找到数据在什么时候被改变的。还是根本没有初始化。

使用特权

评论回复
11
ljhtj| | 2016-2-16 11:16 | 只看该作者
有时候,对于某些变量,不听使唤或条件语句乱来,要考虑是不是,1.变量占用空间太大,RAM不够用。2.编译器优化没有导致,重新完全编译程序。3.编译器问题,重启编译器。

使用特权

评论回复
12
alsort|  楼主 | 2016-2-16 12:08 | 只看该作者
ljhtj 发表于 2016-2-16 11:16
有时候,对于某些变量,不听使唤或条件语句乱来,要考虑是不是,1.变量占用空间太大,RAM不够用。2.编译器 ...

这种情况在每次上电工作后随机出现,参考楼上各位意见,我先研究下指针越位问题,换个不同版本的编译器……

使用特权

评论回复
13
gcy_eyic| | 2016-2-16 12:36 | 只看该作者
是否可以贴程序出来看!

使用特权

评论回复
14
天灵灵地灵灵| | 2016-2-16 15:54 | 只看该作者
这是 电脑 程序应用还是 单片机程序                                

使用特权

评论回复
15
alsort|  楼主 | 2016-2-16 16:16 | 只看该作者
天灵灵地灵灵 发表于 2016-2-16 15:54
这是 电脑 程序应用还是 单片机程序

单片机

使用特权

评论回复
16
colin2135| | 2016-2-16 16:23 | 只看该作者
应该就是被优化掉了,变量前加上__IO

使用特权

评论回复
17
尤彼卡| | 2016-2-16 21:41 | 只看该作者
应该是某个指针越位了

使用特权

评论回复
18
zjh2009| | 2016-2-16 22:46 | 只看该作者
volatile 一下试试,如果你的复位是在中断或者其他线程里面使用的话

使用特权

评论回复
19
戈卫东| | 2016-2-16 23:13 | 只看该作者
也许是MCU没有复位。。。。。

使用特权

评论回复
20
huangcunxiake| | 2016-2-17 08:51 | 只看该作者
修改变量类型为  volatile

使用特权

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

本版积分规则

12

主题

86

帖子

0

粉丝