1.Flash的特性
Flash分为不同的Partion,主要是0 Partion和1 Partion,且0 Partion和1 Partion在整个物理地址中是交互存在的,如下图。所以你的Code既会存在0 Partion中又会存在1 Partion中。但是当你要去擦Flash的时候,如果你的Code完全存在0 partion中,是可以擦1 partion的;反之依然。但一般不是这么存放的,即Code既会存在0 Partion又会存在1 Partion中。所以,当你想去擦Flash的时候,是不可以直接去擦的,目前常规的做法是将Code拷贝到Ram中运行。方法如下:

2.首先将和Flash相关的代码,通过静态编译放到想要的段内,此段为Ram段,如下。

3.在link文件中,将.ramcode段放到对应的Ram分区中,即将代码生成到Ram段,但初始值在对应的Flash中,在上电初始化时,为做Copy动作做准备,如下:



4.在启动代码里做将flash_memory拷贝到int_sram段的动作,如下:

5.最终查看生成的Map文件如下,CddBootFnt_ErsFlDt已经在Ram段内,如下:


本文详细介绍了嵌入式系统中Flash的0Partion和1Partion结构,以及如何通过静态编译、Link文件配置和启动代码实现代码从Flash到RAM的安全擦除和迁移过程。最后展示了Map文件中的内存映射情况。

被折叠的 条评论
为什么被折叠?



