×
单片机 > 单片机程序设计 > 详情

STM32 Flash读写;Flash地址对应的存储内容及方式

发布时间:2020-05-18 发布时间:
|

概念:计算机中最小的信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,也就是1个字节,

1个存储单元存放1个字节,每个存储单元对应一个32位(bit)地址,所以重要的话说三遍:对于32bit的ARM CPU

一个32位地址指向1个字节!!!  一个32位地址指向1个字节!!!   一个32位地址指向1个字节!!!

我们常说的flash空间,多少多少K,指的是多少多少K byte


假如我们执行下面的函数操作:

FlashWriteWord_P(0x1082,&WordVar); /* 向0x1082、0x1083中写入0xABCD */


经过编译,从map文件查看flash内容如下:



注意,前面的1080是十六进制,所以从0x1080到0x1090,共16个地址跨越,因为还有0x108A....0x108F


从这个map中,我们能发现一些问题


(1)验证了一个32位地址存放的是1个字节。


(2)将一个16位数,也就是2个字节,存放的顺序是低字节在前,高字节在后,这个跟感官上不一样。


(3)未存放数据的闪存单元是0xFF,这个不是巧合,因为flash说到底,内部也是只有1和0两种状态,CPU默认都是1.


另外,一个潜规定,向Flash中写数据,起始地址最好是偶数,否则容易出现错误,所以:


可以在0x1080、0x1081中存放一个uint16_t类型的数据;

可以在0x1082、0x1083中存放一个uint16_t类型的数据;

但是不能在0x1081、0x1082中存放一个uint16_t类型的数据。


从上可以看出,数据在flash中存放顺序是低在前,高在后,那么读flash时呢,答案是,会再反转,高在前,低在后,因为读flash必须一次至少读16位,不太允许读8位,所以正好又反过来了。


在编程时,要注意给要分配要存储的内容地址,每个数据对应地址,都是偶数,因为1个数据要占用2个地址。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何升级STM32单片机的代码