五月天青色头像情侣网名,国产亚洲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)的評論 (共 條)

分享到微博請遵守國家法律
咸丰县| 新竹市| 永济市| 拜城县| 称多县| 沈丘县| 宁明县| 四会市| 南乐县| 唐河县| 临澧县| 阆中市| 芦溪县| 彩票| 呼和浩特市| 寿宁县| 麦盖提县| 绥芬河市| 大渡口区| 安达市| 都匀市| 宁强县| 洱源县| 遵义县| 合江县| 新沂市| 湖州市| 灌云县| 金寨县| 黎川县| 横峰县| 富阳市| 邹平县| 丰原市| 同心县| 宜宾县| 宜良县| 原阳县| 沾益县| 宜都市| 平阳县|