五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

13.1代碼重定位_段的概念

2020-08-20 18:40 作者:韋東山  | 我要投稿

S3C2440的CPU可以直接給SDRAM發(fā)送命令、給Nor Flash發(fā)送命令、給4K的片上SRAM發(fā)送命令,但是不能直接給Nand Flsh發(fā)送命令

假如把程序燒寫到Nand Flsh上,即向Nand Flsh燒入 bin 文件,CPU是無(wú)法從Nand Flsh中取代碼執(zhí)行的。

為什還可以使用NAND啟動(dòng)?

  1. 上電后,Nand啟動(dòng)硬件會(huì)自動(dòng)把Nand Flsh前4K復(fù)制到SRAM;

  2. CPU從0地址運(yùn)行SRAM;

如果我的程序大于4K怎么辦?
前4K的代碼需要把整個(gè)程序讀出來(lái)放到SDRAM(即代碼重定位)。

如果從Nor Flash啟動(dòng),會(huì)出現(xiàn)什么問(wèn)題?
將撥動(dòng)開(kāi)關(guān)撥到Nor Flash啟動(dòng)時(shí),此時(shí)CPU認(rèn)為的 0地址 在Nor Flash上面,片內(nèi)內(nèi)存SRAM的基地址就變成了0x40000000(Nand啟動(dòng)時(shí)片內(nèi)內(nèi)存SRAM的基地址基地址是0),由于Nor Flash特性:可以像內(nèi)存一樣讀,但不能像內(nèi)存直接寫,因此需要把全局變量和靜態(tài)變量重定位 放到SDRAM里。


例如執(zhí)行如下幾條匯編指令?

當(dāng)程序中含有需要寫的全局變量或靜態(tài)變量時(shí),假如是在Nand Flash可以正常操作,如果是在Nor Flash,修改無(wú)效。因此我們需要把全局變量和靜態(tài)變量重定位 放到SDRAM?

編譯運(yùn)行查看是否有效果

查看sdram.dis文件 發(fā)現(xiàn)data數(shù)據(jù)段放在了0x00008474這個(gè)地址導(dǎo)致 程序太大

在makefile中加入這么一句話?

arm-linux-ld -Ttext 0 -Tdata 0x700 start.o led.o uart.o init.o main.o -o sdram.elf

16進(jìn)制的700就是十進(jìn)制的2048 這時(shí)我們的bin文件就變?yōu)?049?


燒寫程序:

燒寫在NORFlash 和 燒寫在NANDFlash觀察這兩種的效果。

設(shè)置成NANDFlash啟動(dòng)沒(méi)有問(wèn)題 顯示ABCDE...

設(shè)置成NORFlash啟動(dòng)顯示AAA...

對(duì)于NOR啟動(dòng)時(shí)

g_Char++; ? ? ? ? /* nor啟動(dòng)時(shí), 此代碼無(wú)效 */


一個(gè)程序里面有

  • .text 代碼段

  • .data 數(shù)據(jù)段

  • rodata 只讀數(shù)據(jù)段(const全局變量)

  • bss段 (初始值為0,無(wú)初始值的全局變量)

  • commen 注釋

其中bss段和commen 注釋不保存在bin文件中。?


13.1代碼重定位_段的概念的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
彝良县| 新干县| 紫阳县| 石狮市| 甘南县| 三门峡市| 林芝县| 鹿邑县| 开封市| 靖安县| 乾安县| 洞口县| 花垣县| 吴堡县| 綦江县| 巩义市| 嘉善县| 防城港市| 青田县| 桂平市| 潢川县| 岳阳市| 丹巴县| 如皋市| 涪陵区| 耿马| 工布江达县| 江阴市| 平和县| 抚远县| 马公市| 广河县| 甘南县| 丰县| 武平县| 塔河县| 贵阳市| 怀柔区| 揭阳市| 广饶县| 永德县|