1、
SECTIONS {
}
对应发动源码:
ldr r0, =0x30000000 @1. 方针地址=0x30000000,这是SDRAM的开端地址
mov r1, #4096 @2. 源地址 = 4096,衔接的时分,main.c中的代码都存在NAND Flash地址4096开端处
mov r2, #2048 @3. 仿制长度= 2048(bytes),关于本试验的main.c,这是足够了
bl nand_read @调用C函数nand_read
2、
SECTIONS {
}
ldr r0, =0x30000000 @1. 方针地址=0x30000000,这是SDRAM的开端地址
mov r1, #0 @2. 源地址 = 0
mov r2, #4096 @3. 仿制长度= 4096
bl nand_read @调用C函数nand_read
总结:S3C2440发动时硬件会强制的把nand flash中前4K的内容仿制到2440片内的RAM中履行,这4K的代码的使命是初始化nand flash、SDRAM,然后把悉数的代码从nand flash中复制到SDRAM中,再跳到SDRAM中履行。
1、1中head.o init.o nand.o三个文件的链接地址是:0x00000000 即片内内存(RAM),当硬件把前4K内容复制到2440片内的RAM中时head.o init.o nand.o三文件就在片内履行,实践运转的地址和运转时应该在的地址相同,故这三段代码中能够运用方位相关码,即能够运用全局变量,当初始化nand flash、SDRAM完成后仅仅复制了源地址=4096的main.o段;
2、中head.o init.o nand.o三个文件的链接地址是:0x30000000,即片外SDRAM,阐明head.o(.text) 、init.o(.text) 、nand.o *(.text)这三段代码运转时应该在0x30000000地址,可是S3C2440发动时硬件会强制的把nand flash中前4K的内容仿制到2440片内的RAM中履行时它们处于0x00000000 的地址,故只能运用方位无关码,即不能够运用全局变量,当初始化nand flash、SDRAM完成后程序复制了悉数的代码,复制曩昔今后head.o(.text) 、init.o(.text) 、nand.o *(.text)三文件才坐落该在的地址:0x30000000。