最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
五寨县| 昌图县| 安仁县| 寻甸| 肇东市| 延津县| 信丰县| 长宁县| 宽甸| 五指山市| 丽水市| 巩留县| 神农架林区| 龙门县| 乌拉特中旗| 光山县| 历史| 托克逊县| 湖口县| 岳普湖县| 巴彦淖尔市| 逊克县| 尤溪县| 库尔勒市| 祁东县| 哈密市| 洞头县| 武隆县| 阿坝| 浮山县| 德令哈市| 长宁区| 岑溪市| 海晏县| 贡山| 高淳县| 平舆县| 太仓市| 博爱县| 涟水县| 安庆市|