本课以将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,如果