历史上的今天
今天是:2024年08月22日(星期四)
2018年08月22日 | STM32 Flash读写;Flash地址对应的存储内容及方式
2018-08-22 来源:eefocus
概念:计算机中最小的信息单位是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个地址。
史海拾趣
|
现在ARM处理器优点突出,正在日益成为嵌入式领域的标杆,大家上招聘网站看下就知道了,电子工程师岗位基本上都要求熟悉ARM或DSP,熟悉linux下程序开发。这对我们都是个挑战啊,为了赶上这班车,自己也开始了ARM学习之旅。以后,我会把自己的过程和 ...… 查看全部问答> |
|
我们现有关于PADS /Altium Designer 电路设计的图书选题,诚找有写书意向的作者合作。要求作者有一些实战经验和写作资源,有一定的业余时间、能够保证写作进度。有意者请直接发信 联系方式:haohong99@163.com、478057587(QQ)。欢迎有实践开发 ...… 查看全部问答> |
|
【大讲台】安森美半导体LED照明电源设计 LED照明有着广阔的应用前景,其中LED照明电源的设计至关重要,但LED照明设计给包括中国工程师在内的工程社群带来了挑战,因为LED照明的应用范围非常广泛,应用的功率等级、可以采用的驱动电源种类及电源拓 ...… 查看全部问答> |
|
请教各位高手: 现在我在做键盘驱动,发现一个问题, 我想 用某个按键做标准键盘里面的 * 和 . 两个符号, 我差了键盘值, * -----> 0x6a & ...… 查看全部问答> |
|
最近项目发生些意外,具体是因为2443的核心板原来使用的RAM是MobileDDR128MB,但是因为特殊情况改了普通DDR128MB的RAM后一直无法正常通过USB下载Stpldr/Eboot.bin/NK.bin WINCE6.0的项目在这种变更情况下出现问题了,可是WINCE5.0还是很正常,而且什么 ...… 查看全部问答> |
|
CeGetLastError()的返回值为ERROR_ACCESS_DENIED 是这样的,写了一个DLL,放到手机上。(不需要考虑CPU问题,因为我是在POCKET PC 2003的平台下写的) 然后在PC端用CeRapiInvoke连接。 但是总是失败 使用CeGetLastError()得到的返回值为ERROR_ACCESS_DENIED,也就是错误码为5,拒绝访问。 有人 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 从2011年中国家电博览会启动仪式现场获悉,已成功举办了7届的家博会将首次变脸,除了传统的白色家电产品外,还将融合彩电、数码、音响等消费类电子产品。本届展会主办方也由中国家用电器协会一 ...… 查看全部问答> |




