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

举报
樊心昊 发表于 2020/08/29 22:57:23 2020/08/29
【摘要】 上一章修改了Makefile,现在只需要修改一下链接脚本,大部分的移植工作就算做完了。什么是链接脚本? 链接脚本全称GNU-LD,供gcc工具链在链接阶段时调用,一个hex/bin/elf文件内有多个段,例如只读数据段、代码段、数据段、未初始化数据段等等,这些段在hex/bin/elf文件内的排放顺序取决于链接脚本,这里和大家说一STM32的例子,大家都知道在STM32的程序0地...

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

什么是链接脚本?

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

 

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不是我这个型号,请你按照前面所述方式进行修改,修改后如下图所示。

image.png

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



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。