无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

分享到微博請遵守國家法律
勃利县| 铅山县| 札达县| 会泽县| 锡林浩特市| 汝阳县| 晋宁县| 陵水| 长岭县| 茶陵县| 河北省| 马山县| 锡林郭勒盟| 岳西县| 龙江县| 共和县| 镇雄县| 绥江县| 温泉县| 和顺县| 和林格尔县| 沙洋县| 武夷山市| 安远县| 亳州市| 保康县| 肥城市| 宁海县| 万荣县| 融水| 昂仁县| 忻城县| 平泉县| 工布江达县| 白水县| 桂阳县| 溧水县| 略阳县| 襄樊市| 莱阳市| 九寨沟县|