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段内,如下: