中级会员
 
- 积分
- 229
- 金钱
- 229
- 注册时间
- 2018-3-6
- 在线时间
- 39 小时
|
1金钱
读4个长度,地址如下:
#define SIZE 4
#define FLASH_SAVE_ADDR0 0X08018000
开始这个数组的值是这样的
u8 RX_LOGIN[] = {0xEE,0xEE,0x00,0x08,0x3A,0x10,0xFF,0x00};//登录包
然后执行了这一句
//读取flash
if(SIZE<5)STMFLASH_Read(FLASH_SAVE_ADDR0,(u16*)alarm_control,SIZE);
他的值就变成这样了
0xFF,0xFF,0xFF,0xFF,0x3A,0x10,0xFF,0x00
alarm_control的值也是
0xFF,0xFF,0xFF,0xFF
读的flash是正常的 为什么会改变我其他数组的值
我反复的验证了地址
alarm_control是我读flash要存的数组 0x20000200 alarm_control[] ""
RX_LOGIN是不应该发生改变的地址 0x20000204 RX_LOGIN[] "铑"
我要读的地址 0X08018000
我读的大小 0x00000004
可是他为什么改变了RX_LOGIN的值,新手求指教,谢谢各位大佬了
|
最佳答案
查看完整内容[请看2#楼]
你的alarm_control数组只有4个字节的大小,STMFLASH_Read(FLASH_SAVE_ADDR0,(u16*)alarm_control,SIZE);SIZE虽然是4,但是STM32片内flash是半字操作,也就是实际你读取了8个字节的内容,会占用一个数组的8个字节缓存空间,alarm_control起始地址是0x20000200,占用8个字节就会用到0x20002008,所以就把你RX_LOGIN[]数组里的值替换掉了,你把SIZE改成2或者alarm_control数组定义成8个字节或大于8个字节就好了。
|