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语言的实现....