<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 位置無(wú)關(guān)和位置相關(guān)

位置無(wú)關(guān)和位置相關(guān)

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
1、
SECTIONS {
firtst 0x00000000 : { head.o init.o nand.o}
second 0x30000000 : AT(4096) { main.o }
}
對應啟動(dòng)源碼:
@將NAND Flash中地址4096開(kāi)始的1024字節代碼(main.c編譯得到)復制到SDRAM中
@nand_read_ll函數需要3個(gè)參數:
ldr r0, =0x30000000 @1. 目標地址=0x30000000,這是SDRAM的起始地址
mov r1, #4096 @2. 源地址 = 4096,連接的時(shí)候,main.c中的代碼都存在NAND Flash地址4096開(kāi)始處
mov r2, #2048 @3. 復制長(cháng)度= 2048(bytes),對于本實(shí)驗的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開(kāi)始的1024字節代碼(main.c編譯得到)復制到SDRAM中
@nand_read_ll函數需要3個(gè)參數:
ldr r0, =0x30000000 @1. 目標地址=0x30000000,這是SDRAM的起始地址
mov r1, #0 @2. 源地址 = 0
mov r2, #4096 @3. 復制長(cháng)度= 4096
bl nand_read @調用C函數nand_read
總結:S3C2440啟動(dòng)時(shí)硬件會(huì )強制的把nand flash中前4K的內容復制到2440片內的RAM中執行,這4K的代碼的任務(wù)是初始化nand flash、SDRAM,然后把全部的代碼從nand flash中拷貝到SDRAM中,再跳到SDRAM中執行。
1、1中head.o init.o nand.o三個(gè)文件的鏈接地址是:0x00000000 即片內內存(RAM),當硬件把前4K內容拷貝到2440片內的RAM中時(shí)head.o init.o nand.o三文件就在片內執行,實(shí)際運行的地址和運行時(shí)應該在的地址相同,故這三段代碼中可以使用位置相關(guān)碼,即可以使用全局變量,當初始化nand flash、SDRAM完成后只是拷貝了源地址=4096的main.o段;
2、中head.o init.o nand.o三個(gè)文件的鏈接地址是:0x30000000,即片外SDRAM,說(shuō)明head.o(.text) 、init.o(.text) 、nand.o *(.text)這三段代碼運行時(shí)應該在0x30000000地址,但是S3C2440啟動(dòng)時(shí)硬件會(huì )強制的把nand flash中前4K的內容復制到2440片內的RAM中執行時(shí)它們處于0x00000000 的地址,故只能使用位置無(wú)關(guān)碼,即不可以使用全局變量,當初始化nand flash、SDRAM完成后程序拷貝了全部的代碼,拷貝過(guò)去以后head.o(.text) 、init.o(.text) 、nand.o *(.text)三文件才位于該在的地址:0x30000000。

注:鏈接地址是程序運行時(shí)應該位于的地方,如果程序不在鏈接地址上運行,那么訪(fǎng)問(wèn)全局變量的時(shí)候就會(huì )出錯。

本文引用地址:http://dyxdggzs.com/article/201611/319487.htm




評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>