FLASH编程与改变程序(代码)存储地址的问题

、写在前面

对于在STM32F2F4开发的朋友,有部分数据需要在内部FLASH编程,程序(代码)又比较大,资源空间又有限的情况下,代码默认的存储地址就可能需要搬移。

 

为什么是F2F4系列的芯片呢?因为Main memory扇区(或块)分布不均匀,看下面FLASH模块构成:


 

当然,像STM32F0F1它们的FLASH数据块分布均匀,这类芯片就没必要改变程序存储地址。

 

、为什么要改变代码存储地址

假如芯片的FALSH大小为512KBRAM大小为128KB。而代码大小为400KB(甚至更大),又需要在内部FLASH编程,那么代码的存储地址就不能从默认的起始地址(Sector 0)开始存储。

 

原因很简单:最后一扇区有代码,不能被用户编程

 

还有一种原因:用户RAM大小有限(假如只剩15K未用,RAM用于缓存FLASH数据),而用户编程FLASH的数据有20K,这样就需要分多块(扇区)来操作,这样就需要将小的扇区拿出来给用户编程(即前面16K大小的扇区)。

 

上面举例的总结就是:需要将代码的存储起始地址从Sector 0搬移至Sector 3或者Sector 4,把前面小扇区(Sector 1 --- 3)用于数据编程。(注意Sector 0扇区存储启动的部分代码,不能用于编程)。

 

、改变代码存储地址的方法

代码存储的地址是由编译器决定的,因此这里简单讲述一下KeilIAR如何配置改变代码存储起始地址。下面以起始地址从0x08010000 Sector 4)举例说明。

 

1.Keil配置方法

打开工程目标选项:Project -> Options for Target -> Target。修改目标ROM起始地址。如下图:


 

2.IAR配置方法

配置步骤分如下几步:

A.进入配置界面:Pooject -> Options -> Linker -> Config

B.勾选上Override default”;

C.点击Edit”,修改ROM起始地址为;

D.点击Save”保存(第一次修改后,xxx.icf文件名和路径都选择默认)。

具体如下图:


 

 

、验证代码存储地址

对于STM32芯片来说,可以直接使用STM32 ST-LINK Utility工具读取FLASH数据验证代码是否存储在相应地址位置,其他芯片也可以使用对应可以读取FLASH数据的工具来验证。如下图:


从上图可以看见,代码是从0x08010000 Sector 4)起始存储的。查看Sector 1-3扇区,可以发现数据全是0xFFFF,也就是说没有被代码占用这些扇区。

 

、最后

微信搜索EmbeddDeveloper” 或者扫描下面二维码、关注,查看更多精彩内容。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongerHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值