[LiteOS移植]目标芯片STM32F1 修改链接脚本

网友投稿 583 2022-05-30

上一章修改了Makefile,现在只需要修改一下链接脚本,大部分的移植工作就算做完了。

什么是链接脚本?

链接脚本全称GNU-LD,供gcc工具链在链接阶段时调用,一个hex/bin/elf文件内有多个段,例如只读数据段、代码段、数据段、未初始化数据段等等,这些段在hex/bin/elf文件内的排放顺序取决于链接脚本,这里和大家说一STM32的例子,大家都知道在STM32的程序0地址开始为中断向量表,当发生中断时,程序会强制被硬件跳转到0x0+offset(中断的偏移地址)处,执行该处的指令,我们一般就直接将跳转到中断服务程序的汇编指令存放在0x0+offset(中断的偏移地址)处,这样中断就能得到处理,为了能确保跳转到中断服务程序的汇编指令一定在某个位置,所以我们需要使用链接脚本来控制链接。

[LiteOS移植]目标芯片STM32F1 修改链接脚本

GNU-LD 在线文档https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html

修改os.ld

在targets\STM32F103RC\GCC目录下有一个os.ld链接脚本,这就是gcc工具链链接时所调用的,在“LiteOS_Lab Makefile分析”章节中向大家讲解过Makefile中如何控制gcc链接时调用os.ld文件。

根据STM32F103Rx数据手册可知其Flash起始地址为0x0800 0000,大小为256KB;RAM起始地址为0x2000 0000,大小为48KB,如果不想查阅芯片手册也可以直接看之前我们通过STM32CubeMX生成的工程中的STM32F103RCTx_FLASH.ld得到以上数据。

首先修改第36行的esrack,这是栈顶地址,一般设置为RAM的结束地址,因为是满减栈,通过RAM大小加上RAM的起始地址得到,48KB*1024B=49152B转换为16进制得到0xC000,起始地址为0x2000 0000加上0xC000得到0x2000 C000;修改第33行的RAM大小为48K,Flash为256K,如果你移植的目标MCU不是我这个型号,请你按照前面所述方式进行修改,修改后如下图所示。

链接脚本其余地方均保持原有即可,到这里就修改完成了,下一节可以开始创建工程了。

轻量级操作系统 LiteOS IoT

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux 学习网站汇总
下一篇:Scrapy可视化管理管理工具总结
相关文章