STM32分散加载
我们知道MDK的分散加载主要是通过.sct文件实现的,链接器根据.sct文件的配置分配各个节区地址,生成分散加载代码,因此我们通过修改该文件可以定制具体节区的存储位置。
如何打开.sct文件
在Options for Targets->Linker界面下面去掉默认选项,然后edit scatter file 就可以在编辑界面中看到.sct文件了。
.sct文件结构
LR_IROM1 0x08000000 0x00010000 { ; load region size_region ##就是所有代码需要下载到0x08000000 开始的区域中,且这个区域大小只有0x00010000 这么大
ER_IROM1 0x08000000 0x00010000 { ; load address = execution address ##加载域等于执行域,只能是只读的代码段和只读数据段
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004000 { ; RW data ##执行域是以0x20000000 开始的长度为0x00004000 一段区域
.ANY (+RW +ZI) ;其中包括的是哪些文件
}
RW_IRAM2 0x20004000 0x00001000 { ##执行域是以0x20004000 开始的长度为0x00001000 一段区域
delay.o (+ZI +RW)
.ANY (+RW +ZI)
}
}
修改分散加载文件
其实上面贴的这段代码是修改之后的.sct文件,如果需要修改分散加载文件,并使其生效需要
- 修改Options for Targets->Target 的onchip 的rom或者ram,容量地址必须和选择的芯片一致
- 修改某个文件的存储属性,在工程窗口中右击文件名字 Options for file ,然后出现窗口可以修改文件的存储属性
- 修改完,重新编译,点开.sct文件就可以看到.sct已经被修改了,然后可以看map文件可以看到相关变量函数地址信息已经改变。