开发板上存储模块
- 1, 4k片内存储SRAM,可读可写,如果是nor启动,启始地址是0x4000 0000,如果是nand启动,启始地址是0.
- 2, SDRAM,可读可写,启始地址是0x3000 0000
- 3, 所以当我们把bin文件烧写到nor或者nand时,需要进行代码重定向.
- 4, 一个程序包含一下内容: 代码段(text),数据段(全局变量data),只读数据段(const全局变量 rodata), bss段(初始值为0或无初始值的全局变量),
commen(注释段)
nor启动和nand启动
链接脚本解析
优化重定向效率
每次不再以bit为单位拷贝或清除,而是以字节形式来处理
位置无关码
- 1, 使用相对跳转命令.
- 2, 重定位之前,不可使用绝对地址,不可访问全局变量/静态变量,
不可访问有初始值的数组. - 3, 重定位之后, 适用 ldr pc, =xxx来跳转到Runtime Addr.
参考
c函数怎么使用lds文件中的变量adc:
a. 在c函数声明中声明变量为extern类型,比如: extern int adc;
b. 使用时, 要去地址:
int *p = &adc; //p的值即为lds文件中的adc;