11 段的概念,重定位的引入


但是若程序超过了 4k,则会将程序代码放到 SDRAM 中去

cpu可以直接访问除nand之外的内存

nor的特点是可以像内存一样读,但是不可以像内存一样写,因此遇到需要修改的全局变量或者静态变量时,直接修改是无效的,需要进行重定位,将其放在SDRAM中。

所以当设定为nor启动时,对于程序中全局变量的修改是无效的,比如自增一循环输出,实际上,只能输出没自增之前的

bss和commen不保存在bin中


使用make编译后,使用vi sdram.dis进行反汇编,可以查看到上图各个部分存放的起始地址


链接脚本

解决bin文件的黑洞问题的方法:

所谓的黑洞问题是,bin文件代码段和全局变量之间的间隔过大的现象

解决方法:

1.仅重定位数据段

2.数据段和代码段都重定位

重定位需要使用链接脚本


在main函数之前需要做的事情:

1.设置栈

2.初始化SDRAM

3.重定位代码

4.清除BSS段

此前这些工作都是由类似keil的开发工具给做好了


位置无关码

C语言的实现....

相关