[应用相关] 写程序时遇到的一个问题

[复制链接]
3569|34
 楼主| alsort 发表于 2016-2-17 10:07 来自手机 | 显示全部楼层
huangcunxiake 发表于 2016-2-17 08:51
修改变量类型为  volatile

我试试,现在基本确定另一段代码(与该flag执行内容过无关)屏蔽后就没有此现象,针对各位意见逐个试试,明天给出测试结果
 楼主| alsort 发表于 2016-2-18 18:53 来自手机 | 显示全部楼层
colin2135 发表于 2016-2-16 16:23
应该就是被优化掉了,变量前加上__IO

volatile不行,还是会出现

这现象是随机的,今天开关电反复测了
 楼主| alsort 发表于 2016-2-18 18:54 来自手机 | 显示全部楼层
maiweiqi 发表于 2016-2-15 18:06
如果你没有在其他地方用到flag的话,那应该是某个指针越位了,指到了flag的地址,然后把flag更改了。 ...

在不复位的情况下怎么解决/杜绝指针越位问题
 楼主| alsort 发表于 2016-2-18 18:55 来自手机 | 显示全部楼层
ccw1986 发表于 2016-2-15 19:44
指针用的有问题吧,可能是越界了

开了几个中断
如果越界,使用C语言怎么解决啊,不能直接对地址进行操作
huangcunxiake 发表于 2016-2-19 15:42 | 显示全部楼层
最好别针对地址直接操作了,你不知道范围啊,容易搞错。
 楼主| alsort 发表于 2016-2-19 17:31 来自手机 | 显示全部楼层
huangcunxiake 发表于 2016-2-19 15:42
最好别针对地址直接操作了,你不知道范围啊,容易搞错。

针对指针越界,有什么好的办法

或者怎么肯定确实是指针越界了
maiweiqi 发表于 2016-2-19 22:40 | 显示全部楼层
alsort 发表于 2016-2-18 18:54
在不复位的情况下怎么解决/杜绝指针越位问题

如果你用的是keil的话,可以双击工程名,可以打开.map文件,看看你flag变量被分配到了哪个内存地址,然后你就查找这个内存地址周围的变量,看看哪个被你的指针引用过。
huangcunxiake 发表于 2016-2-20 09:15 | 显示全部楼层
alsort 发表于 2016-2-19 17:31
针对指针越界,有什么好的办法

或者怎么肯定确实是指针越界了

在地址操作的时候最好先定义个宏,标记开头的位置和结尾的位置,每次的操作指针移动后判断是否出界了。
wangjianxing 发表于 2016-2-20 09:51 | 显示全部楼层
随便看看
 楼主| alsort 发表于 2016-2-21 09:55 来自手机 | 显示全部楼层
maiweiqi 发表于 2016-2-19 22:40
如果你用的是keil的话,可以双击工程名,可以打开.map文件,看看你flag变量被分配到了哪个内存地址,然后 ...

测试发现在定时器2中使用的一个数组(内容只有 0、1)对该标志位有影响,屏蔽掉对数组写1的语句后不会在进入条件语句了

整个人都不好了
Mancherstun 发表于 2016-2-21 13:24 | 显示全部楼层
追踪一下flag是不是在其他地方赋值了啊
mmuuss586 发表于 2016-2-21 13:30 | 显示全部楼层

优化的可能性大点;
maiweiqi 发表于 2016-2-21 16:01 | 显示全部楼层
alsort 发表于 2016-2-21 09:55
测试发现在定时器2中使用的一个数组(内容只有 0、1)对该标志位有影响,屏蔽掉对数组写1的语句后不会在 ...

贴个代码看看
天灵灵地灵灵 发表于 2016-3-7 20:24 | 显示全部楼层
随机出现的错误是初始化被破坏的问题,你让相关初始化函数重新运行就行了,当校验错误时候重新初始化。
syq800 发表于 2016-3-7 20:54 | 显示全部楼层
上电flag初始化下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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