OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3111|回复: 10

读flash改变了我的其他数组 求指教STM32F103C8T6

[复制链接]

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
发表于 2018-3-6 10:33:30 | 显示全部楼层 |阅读模式
1金钱
读4个长度,地址如下:
#define SIZE 4               
#define FLASH_SAVE_ADDR0  0X08018000

开始这个数组的值是这样的
QYAOR5SHI}S4[GN~~I~67YA.jpg
u8 RX_LOGIN[] = {0xEE,0xEE,0x00,0x08,0x3A,0x10,0xFF,0x00};//登录包
然后执行了这一句
//读取flash
if(SIZE<5)STMFLASH_Read(FLASH_SAVE_ADDR0,(u16*)alarm_control,SIZE);
0JZTII4~I)Q5U@5PITE[LQ6.jpg
他的值就变成这样了
}$RGH7F7@A5_K745E(`9Z}6.jpg
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个字节就好了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
850
金钱
850
注册时间
2015-12-8
在线时间
176 小时
发表于 2018-3-6 10:33:31 | 显示全部楼层
你的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个字节就好了。
为自己掌握新的知识感到快乐
回复

使用道具 举报

0

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 2018-3-6 10:39:44 | 显示全部楼层
alarm_control数组定义在哪
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
 楼主| 发表于 2018-3-6 10:42:16 | 显示全部楼层
我看了看,flash一次读的是两个字节 我一共需要读4个字节 只需要读两次就好 多读了两次 但是为什么改变了他的的值 希望能详细学习下
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
 楼主| 发表于 2018-3-6 10:59:58 | 显示全部楼层
jkd405 发表于 2018-3-6 10:39
alarm_control数组定义在哪

u8 alarm_control[4];//òa&#182;á3&#246;μ&#189;STM32 FLASH&#189;&#248;DD&#196;&#214;&#214;óμ&#196;×&#214;·&#251;′&#174;êy×é
就宏定义地址地址下边
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
 楼主| 发表于 2018-3-6 11:01:29 | 显示全部楼层
jkd405 发表于 2018-3-6 10:39
alarm_control数组定义在哪

C:\Users\Administrator\Desktop/K3BO@R`9~KWO)2_V7%06L3G.png
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
 楼主| 发表于 2018-3-6 11:03:23 | 显示全部楼层
Jundodo 发表于 2018-3-6 10:51
你的alarm_control数组只有4个字节的大小,STMFLASH_Read(FLASH_SAVE_ADDR0,(u16*)alarm_control,SIZE);SIZ ...

这个我已经发现了额 但是这个数组越界是怎么越的 我想知道这个
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
 楼主| 发表于 2018-3-6 11:05:33 | 显示全部楼层
希望有大神能详细解释一下这个数组是如何越界到别人头上的 他们地址相差了那么远
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
 楼主| 发表于 2018-3-6 11:06:11 | 显示全部楼层
我明白了
谢谢各位大佬
我知道如何越界到别人头上的了
回复

使用道具 举报

0

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 2018-3-6 11:21:23 | 显示全部楼层
momo最可爱 发表于 2018-3-6 11:06
我明白了
谢谢各位大佬
我知道如何越界到别人头上的了

哪里差的远,不是挨着的吗,就是2楼的说法,看你定义就是这个目的,你定义的长度4的8位变量,调用的时候却是4个16位的,上面的地址明显挨着的
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
 楼主| 发表于 2018-3-6 16:38:20 | 显示全部楼层
jkd405 发表于 2018-3-6 11:21
哪里差的远,不是挨着的吗,就是2楼的说法,看你定义就是这个目的,你定义的长度4的8位变量,调用的时候 ...

大意了大意了 谢谢了 我最后发现了这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 18:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表