关于位置相关码和位置无关码的理解(韦东山视频中mmu实验和串口实验)
mmu和串口实验都有“设置存储控制器以使用SDRAM 函数”memsetup ,mmu实验用的是位置相关的代码写的,而串口实验用的是位置无关的代码写的。
程序的运行位置,和存储位置由.lds文件决定。
在mmu实验中lds文件为
SECTIONS {
firtst 0x00000000 : { head.o init.o }
second 0xB0004000 : AT(2048) { leds.o }
}
memsetup函数在init.c文件中,由lds文件分析这段函数是在2440内部的SRAM中运行的,所以可以使用位置相关码写。
在串口实验中lds文件为
SECTIONS {
. = 0x30000000;
.text : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
整个代码都是要放在SDRAM中运行,memsetup是2440启动自动拷贝到内部4k的SRAM中去了。所以会出现运行位置在SDRAM中,而实际运行是在2440中。所以要用位置无关码来写。
以上为个人学习总结,如有错误欢迎指正,本人在此先谢谢各位