打印
[MCU]

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

[复制链接]
311|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlyuan|  楼主 | 2019-8-3 16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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地址范围存储数据

使用特权

评论回复
5
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区域,改区域也可以用做代码区使用。

使用特权

评论回复
6
liliang9554| | 2019-8-3 16:20 | 只看该作者
信息存储器可当做EEPROM存放数据。

使用特权

评论回复
7
午夜粪车| | 2019-8-3 16:24 | 只看该作者
修改Linker文件

使用特权

评论回复
8
spark周| | 2019-8-3 16:29 | 只看该作者
由于FLASH的特性,我们在对数据进行改写的时候,必须先对整页进行擦除然后在字节写,所以,当我们更改FLASH的数据时,一般是先把该页数据读到缓存里,更改指定位置数据,然后擦除该页的FLASH,在进行写操作。

使用特权

评论回复
9
huangchui| | 2019-8-3 16:31 | 只看该作者
自定义存放代码的地址就要通过修改Linker文件来进行或者CCS下的CMD文件。

使用特权

评论回复
10
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会破坏程序。

使用特权

评论回复
11
jlyuan|  楼主 | 2019-8-3 16:39 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝