五月天青色头像情侣网名,国产亚洲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ó)家法律
武汉市| 平顶山市| 响水县| 镇坪县| 谷城县| 丹东市| 临西县| 昌江| 四会市| 永顺县| 武穴市| 余干县| 苏州市| 营口市| 马边| 洪江市| 三都| 策勒县| 清水县| 平舆县| 开鲁县| 和田市| 望江县| 莫力| 新丰县| 玉环县| 仁怀市| 平阳县| 科尔| 朔州市| 达州市| 桐乡市| 弋阳县| 石河子市| 郧西县| 广宁县| 云浮市| 微博| 宁都县| 云龙县| 乌审旗|