第013课 代码重定位

本文详细介绍了代码重定位的原因,对比了只重定位数据段与重定位全体代码的区别,并通过实例讲解了如何使用链接脚本进行全体代码重定位,特别是涉及到在嵌入式系统中,如何处理位置无关码的问题,确保程序在SDRAM中正确执行。
摘要由CSDN通过智能技术生成

 

本课以将Nor flash中的程序重定位到SDRAM为例,讲解代码重定位与位置无关码。

名词释义:

【代码重定位】将代码从一个地方移动到另一个地方。

【位置无关码】代码执行时使用相对地址命令(如 b / bl),程序仍在flash运行。

【段】编译器把程序分成各个段进行管理

.text 代码段 存放程序代码
.rodata 只读数据段 存放只读数据,如常量等
.data 数据段 存放已经初始化且值 != 0 的全局变量
.bss BSS段 存放未初始化和初始化为0的全局变量
.common   有些编译器将未初始化的全局变量放在这里
.comment 注释段 关于程序的一些信息,对程序执行没有作用

 

1、为什么要进行代码重定位?

对于Nor flash,程序可以直接在Nor flash上执行,但Nor flash中存储的数据不能直接被更改,运行时无法改变存储在其中的全局变量值(局部变量存储在栈中),所以需要把bss段或者整个程序重定位到SDRAM;

对于Nand flash,不能直接执行程序,需要把程序复制到片内内存SRAM中执行,但SRAM的大小只有4KB,如果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值