发新帖我要提问
12
返回列表
打印
[应用相关]

写程序时遇到的一个问题

[复制链接]
楼主: alsort
手机看帖
扫描二维码
随时随地手机跟帖
21
alsort|  楼主 | 2016-2-17 10:07 | 只看该作者 回帖奖励 |倒序浏览
huangcunxiake 发表于 2016-2-17 08:51
修改变量类型为  volatile

我试试,现在基本确定另一段代码(与该flag执行内容过无关)屏蔽后就没有此现象,针对各位意见逐个试试,明天给出测试结果

使用特权

评论回复
22
alsort|  楼主 | 2016-2-18 18:53 | 只看该作者
colin2135 发表于 2016-2-16 16:23
应该就是被优化掉了,变量前加上__IO

volatile不行,还是会出现

这现象是随机的,今天开关电反复测了

使用特权

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

在不复位的情况下怎么解决/杜绝指针越位问题

使用特权

评论回复
24
alsort|  楼主 | 2016-2-18 18:55 | 只看该作者
ccw1986 发表于 2016-2-15 19:44
指针用的有问题吧,可能是越界了

开了几个中断
如果越界,使用C语言怎么解决啊,不能直接对地址进行操作

使用特权

评论回复
25
huangcunxiake| | 2016-2-19 15:42 | 只看该作者
最好别针对地址直接操作了,你不知道范围啊,容易搞错。

使用特权

评论回复
26
alsort|  楼主 | 2016-2-19 17:31 | 只看该作者
huangcunxiake 发表于 2016-2-19 15:42
最好别针对地址直接操作了,你不知道范围啊,容易搞错。

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

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

使用特权

评论回复
27
maiweiqi| | 2016-2-19 22:40 | 只看该作者
alsort 发表于 2016-2-18 18:54
在不复位的情况下怎么解决/杜绝指针越位问题

如果你用的是keil的话,可以双击工程名,可以打开.map文件,看看你flag变量被分配到了哪个内存地址,然后你就查找这个内存地址周围的变量,看看哪个被你的指针引用过。

使用特权

评论回复
28
huangcunxiake| | 2016-2-20 09:15 | 只看该作者
alsort 发表于 2016-2-19 17:31
针对指针越界,有什么好的办法

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

在地址操作的时候最好先定义个宏,标记开头的位置和结尾的位置,每次的操作指针移动后判断是否出界了。

使用特权

评论回复
29
wangjianxing| | 2016-2-20 09:51 | 只看该作者
随便看看

使用特权

评论回复
30
alsort|  楼主 | 2016-2-21 09:55 | 只看该作者
maiweiqi 发表于 2016-2-19 22:40
如果你用的是keil的话,可以双击工程名,可以打开.map文件,看看你flag变量被分配到了哪个内存地址,然后 ...

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

整个人都不好了

使用特权

评论回复
31
Mancherstun| | 2016-2-21 13:24 | 只看该作者
追踪一下flag是不是在其他地方赋值了啊

使用特权

评论回复
32
mmuuss586| | 2016-2-21 13:30 | 只看该作者

优化的可能性大点;

使用特权

评论回复
33
maiweiqi| | 2016-2-21 16:01 | 只看该作者
alsort 发表于 2016-2-21 09:55
测试发现在定时器2中使用的一个数组(内容只有 0、1)对该标志位有影响,屏蔽掉对数组写1的语句后不会在 ...

贴个代码看看

使用特权

评论回复
34
天灵灵地灵灵| | 2016-3-7 20:24 | 只看该作者
随机出现的错误是初始化被破坏的问题,你让相关初始化函数重新运行就行了,当校验错误时候重新初始化。

使用特权

评论回复
35
syq800| | 2016-3-7 20:54 | 只看该作者
上电flag初始化下

使用特权

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

本版积分规则