1、norflash启动,全局变量的存储方式,因为norflash只能读,不能写
2、nandflash启动,全局变量的存储方式
3、解决全局变量在norflash启动时,无法读取norflash改写全局变量的问题,引入重定位
4、连接脚本的书写
SECTIONS {
.text 0 : { *(.text) } //代码段
.rodata : { *(.rodata) } //可读段
.data 0x30000000 : AT(0x800) //数据段,.data 0x30000000代码运行地址,AT(0x800)在 bin文件中的地址
{
data_load_addr = LOADADDR(.data); //获取AT(0x800)在 bin文件中的地址
data_start = . ; //数据段开始
*(.data)
data_end = . ; //数据段结束
}
.bss : { *(.bss) *(.COMMON) } //*(.bss) *(.COMMON)段
}
5、重定位,重定位前需要初始化SDRAM
bl sdram_init // 初始化SDRAM
/* 重定位data段 */
ldr r1, =data_load_addr /* data段在bin文件中的地址, 加载地址 */
ldr r2, =data_start /* data段在重定位地址, 运行时的地址 */
ldr r3, =data_end /* data段结束地址 */
cpy: //重定位,拷贝数据段到SDRAM中,从norflash和SRAM中读取数据段到SDRAM中,后面在mian中就可
ldrb r4, [r1] //以正常在norflash中使用全局变量的。
strb r4, [r2]
add r1, r1, #1
add r2, r2, #1
cmp r2, r3
bne cpy