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

歡迎光臨散文網(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)的評論 (共 條)

分享到微博請遵守國家法律
满洲里市| 重庆市| 东平县| 莫力| 嘉义市| 上思县| 五常市| 江门市| 日土县| 同德县| 临武县| 耒阳市| 万州区| 名山县| 马关县| 繁峙县| 张北县| 盐城市| 兴城市| 游戏| 铜川市| 江孜县| 双流县| 中牟县| 松阳县| 晋中市| 岚皋县| 射洪县| 获嘉县| 曲阳县| 噶尔县| 永胜县| 泌阳县| 晋城| 攀枝花市| 新邵县| 枣强县| 澄迈县| 珲春市| 玛多县| 通州区|