SMT32 MDK 环境关于 volatile 变量出错 什么原因

2019-12-31 19:19发布

项目中从NAND flash 读出的的临时数组 数据经常变化怎么办
比如定义
NAND_ADDRESS HandAddr;//片外手动操作地址
uint8_t HandBuffer [200]; //手动操作临时数组
还有类似的别的存储,
在查询别的NANFLASH地址数据时候, 经常把
HandBuffer [200];  里边的内容改变, 至今不知什么原因,
想了办法
把数据定义成
volatile  uint8_t HandBuffer [200]; //手动操作临时数组 ,
在另外一个文件是使用HandBuffer [200];
extern volatile  uint8_t HandBuffer [200]; //手动操作临时数组 ,

可是编辑出现警告什么原因
....UserEthernetInternet cp_demo.c(1192): warning:  #167-D: argument of type "volatile uint8_t *" is incompatible with parameter of type "uint8_t *"
....UserEthernetInternet cp_demo.c(1205): warning:  #167-D: argument of type "volatile uint8_t *" is incompatible with parameter of type "void *restrict"
24条回答
jiangzhimin
1楼 · 2020-01-01 09:26.采纳回答
flamma 发表于 2017-2-14 14:38
我前面不是说过了吗,volatile对你变量被改写的问题不起任何作用。莫名被改写一般是有内存写越界的情况。 ...

谢谢你的指点。
定义了数组是200个
下角标最大是[117]个,应该不是越界,
因为在查询别的 NANDFLASH 数据  有的能改写HandBuffer [200]; 数组里的变量, 有的不能改写
愁人, 现在用最笨的方法, 用之前要进行从NANDFLASH 读一遍。
jiangzhimin
2楼-- · 2020-01-02 12:14
security 发表于 2017-2-15 08:45
你应该根据前面坛友的建议,去抓下问题。

问题的本质,就是内存被篡改了,看看是否越界,指针指向错误等 ...

按照前边的坛友查过, 我定义的是数组内存空间指点够了 不涉及内容的改写, 另外没有涉及指针,
正在排查别的原因, 实在不行只能用一次读取一次了

jiangzhimin
3楼-- · 2020-01-02 12:57
 精彩回答 2  元偷偷看……
abl
4楼-- · 2020-01-02 18:11
可能是堆栈溢出了。
jiangzhimin
5楼-- · 2020-01-02 18:19
本帖最后由 jiangzhimin 于 2017-2-15 15:16 编辑
security 发表于 2017-2-15 08:53
能在线 debug 的话,就按照 3 楼给出的 debug 方法,设置 data breakpoint, access type 为 wirte。 ...


是这个窗口吗,  data breakpoint 还有点不懂   不知哪里出错
security
6楼-- · 2020-01-02 22:48
jiangzhimin 发表于 2017-2-15 14:45
是这个窗口吗,  data breakpoint 还有点不懂   不知哪里出错

是的,
你点击右下角的 help,看看手册。
jiangzhimin
7楼-- · 2020-01-03 00:56
各位这样设置断点条件对吗。 command 一般后边填什么啊, 网上查了很多资料一般都不填也行吧

一周热门 更多>