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

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

13.4代碼重定位_拷貝代碼和鏈接腳本的改進(jìn)

2020-08-21 14:43 作者:韋東山  | 我要投稿

本節(jié)進(jìn)行拷貝代碼的改進(jìn)和鏈接腳本的改進(jìn)。

前面重定位時,需要ldrb命令從的Nor Flash讀取1字節(jié)數(shù)據(jù),再用strb命令將1字節(jié)數(shù)據(jù)寫到SDRAM里面。?

????????JZ2440上的Nor Flash是16位,SDRAM是32位。 假設(shè)現(xiàn)在需要復(fù)制16byte數(shù)據(jù), 采用ldrb命令每次只能加載1byte,因此CPU需要發(fā)出16次命令,內(nèi)存控制器每次收到命令后,訪問硬件Nor Flash,因此需要訪問硬件16次; 同理,訪問SDRAM時,CPU需要執(zhí)行strb 16次,內(nèi)存控制器每次收到命令后,訪問硬件SDRAM,也要16次,這樣總共訪問32次。

????????現(xiàn)在對其進(jìn)行改進(jìn),使用ldr從Nor Flash中讀,ldr命令每次加載4字節(jié)數(shù)據(jù),因此CPU只需執(zhí)行4次,但由于Nor Flash是16位的,內(nèi)存控制器每次收到CPU命令后,需要拆分成兩次訪問,因此需要訪問硬件8次; 使用str寫SDRAM,CPU只需執(zhí)行4次,內(nèi)存控制器每次收到命令后,直接硬件訪問32位的SDRAM,因此這里只需要4次,這樣總共訪問只需要12次。 在整個操作中,花費(fèi)時間最長的就是硬件訪問,改進(jìn)后代碼,減少了硬件訪問的次數(shù),極大的提高了效率。

Chapter13 lesson4 001.jpg

根據(jù)上面原理修改代碼,修改start.S:?

然后編譯燒寫,發(fā)現(xiàn)啟動后沒有輸出字符。修改主程序,嘗試以整數(shù)格式輸出字符,發(fā)現(xiàn)輸出的數(shù)從0開始,應(yīng)該是 全局變量被破壞了。

屏蔽掉start.S里面的清理命令,測試是否是清除bss段是清除了全局變量。?

屏蔽后,正常輸出,鎖定了問題大致位置。查看反匯編文件,原來是沒有向4取整。 修改鏈接腳本讓bss段,使用ALIGN(4)向4取整。?

現(xiàn)在重新編譯燒寫,測試結(jié)果正常。 再次查看反匯編文件,發(fā)現(xiàn)現(xiàn)在bss段以4字節(jié)對齊,清理bss段也是正常的。?

同樣的問題也會出在代碼重定位這里,如何保證data段起始地址也是向4對齊呢? 也是使用ALIGN(4)向4取整。?

Uboot是裸機(jī)的集大成者,可以參考uboot鏈接腳本也是類似的。

13.4代碼重定位_拷貝代碼和鏈接腳本的改進(jìn)的評論 (共 條)

分享到微博請遵守國家法律
楚雄市| 民勤县| 寿阳县| 北流市| 平潭县| 隆安县| 池州市| 淄博市| 通山县| 临安市| 新昌县| 九江市| 吉安县| 田林县| 肇源县| 塔河县| 饶河县| 白城市| 临安市| 抚州市| 宁波市| 潜江市| 宣化县| 巍山| 皋兰县| 鹿邑县| 富川| 萨嘎县| 集贤县| 扬州市| 中超| 云南省| 新乐市| 临夏市| 望谟县| 杭锦后旗| 嘉义市| 泌阳县| 剑阁县| 图木舒克市| 纳雍县|