[MCU] 怎样才能知道哪个地址里面存的是代码

[复制链接]
 楼主| jlyuan 发表于 2019-8-3 16:01 | 显示全部楼层 |阅读模式
怎样才能知道哪个地址里面存的是代码,哪个地址里面是我当做EEPROM可以使用的呢?
我是表示汗颜的,,那会学的一点知识的全还给老师了。
heweibig 发表于 2019-8-3 16:04 | 显示全部楼层

一般注存储器存放代码,信息存储器可当做EEPROM存放数据。
楼主可以自己定义要存放的地址。
wuhany 发表于 2019-8-3 16:10 | 显示全部楼层
不知道楼主用的什么器件,但下面这幅MSP430x1xx系列的图应该可以说明问题:
heweibig 发表于 2019-8-3 16:13 | 显示全部楼层

在430里面,flash地址分为主存(main memory)和信息内存(information memory)两块,其中信息内存主要被用来存放信息。二者只是地址不同,使用起来没有区别。

建议楼主使用器件手册中指定的information memory地址范围存储数据
spark周 发表于 2019-8-3 16:17 | 显示全部楼层

我们平时所说的FLASH用来当EEPROM用,实际上FLASH是不能完全替代EEPROM的,只是用软件来处理可以让外部看起来像是一个EEPROM的区域。
1. 之前由于FLASH的擦写次数不够多,早起的FLASH只能擦写1000次,所以经常要改写的数据就需要保存在EEPROM中。
2. 现在FLASH的擦写普遍可以达到1W-10W次,所以我们就有了这种可能,用FLASH来保存需要经常改写的数据。
3. 由于FLASH的特性,我们在对数据进行改写的时候,必须先对整页进行擦除然后在字节写,所以,当我们更改FLASH的数据时,一般是先把该页数据读到缓存里,更改指定位置数据,然后擦除该页的FLASH,在进行写操作。
4. 而EEPROM却不存在这个操作,它支持字节的擦除和写操作,所以可以对任意位置的数据改写。
5. 为了让FLASH更方便地使用,MSP430提供一个INFO FLASH的区域,改区域的一个页面大小较小(64、128字节),这样我们使用该区域模拟EEPROM的时候,需要的缓存就小,页写的时间也大大缩小。
6. 如果不使用INFO FLASH区域,改区域也可以用做代码区使用。
liliang9554 发表于 2019-8-3 16:20 | 显示全部楼层
信息存储器可当做EEPROM存放数据。
午夜粪车 发表于 2019-8-3 16:24 | 显示全部楼层
修改Linker文件
spark周 发表于 2019-8-3 16:29 | 显示全部楼层
由于FLASH的特性,我们在对数据进行改写的时候,必须先对整页进行擦除然后在字节写,所以,当我们更改FLASH的数据时,一般是先把该页数据读到缓存里,更改指定位置数据,然后擦除该页的FLASH,在进行写操作。
huangchui 发表于 2019-8-3 16:31 | 显示全部楼层
自定义存放代码的地址就要通过修改Linker文件来进行或者CCS下的CMD文件。
spark周 发表于 2019-8-3 16:35 | 显示全部楼层

如果觉得修改LINKER文件有困难,也有一种方法可以安全地使用MAIN FLASH区。在IAR的OPTION勾选生成MAP文件,MAP文件里可以看到当前程序编译后的大小,complier一般会从低地址向高地址生成HEX文件,比如MCU的FLASH大小为32K,MAP中CODE区(即代码区)大小为15K,为了日后程序代码增加,可把前20K假设为应用程序占用的区域,后12K做为用户数据保存区,FLASH的读写API只访问后12K的地址空间即可,这种不修改LINKER文件的方法,需要随时关注程序是否超过了20K的范围,如果超过则用户数据区就要后移,不然FLASH写API会破坏程序。
 楼主| jlyuan 发表于 2019-8-3 16:39 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部