您的位置 首页 产品

方位无关和方位相关

1、SECTIONS{firtst0x00000000:{headoinitonando}second0x30000000:AT(4096){maino}}对

1、

SECTIONS {
firtst 0x00000000 : { head.o init.o nand.o}
second 0x30000000 : AT(4096) { main.o }
}
对应发动源码:
@将NAND Flash中地址4096开端的1024字节代码(main.c编译得到)仿制到SDRAM中
@nand_read_ll函数需求3个参数:
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 {
. = 0x30000000;
.text : {
head.o(.text)
init.o(.text)
nand.o
*(.text)
}
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
@将NAND Flash中地址4096开端的1024字节代码(main.c编译得到)仿制到SDRAM中
@nand_read_ll函数需求3个参数:
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。

注:链接地址是程序运转时应该坐落的当地,假如程序不在链接地址上运转,那么拜访全局变量的时分就会犯错。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/263411.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部