文檔標(biāo)尺怎么弄出來?(怎么把標(biāo)尺弄出來)
812
2022-05-30
上一章修改了Makefile,現(xiàn)在只需要修改一下鏈接腳本,大部分的移植工作就算做完了。
什么是鏈接腳本?
鏈接腳本全稱GNU-LD,供gcc工具鏈在鏈接階段時(shí)調(diào)用,一個(gè)hex/bin/elf文件內(nèi)有多個(gè)段,例如只讀數(shù)據(jù)段、代碼段、數(shù)據(jù)段、未初始化數(shù)據(jù)段等等,這些段在hex/bin/elf文件內(nèi)的排放順序取決于鏈接腳本,這里和大家說一STM32的例子,大家都知道在STM32的程序0地址開始為中斷向量表,當(dāng)發(fā)生中斷時(shí),程序會(huì)強(qiáng)制被硬件跳轉(zhuǎn)到0x0+offset(中斷的偏移地址)處,執(zhí)行該處的指令,我們一般就直接將跳轉(zhuǎn)到中斷服務(wù)程序的匯編指令存放在0x0+offset(中斷的偏移地址)處,這樣中斷就能得到處理,為了能確保跳轉(zhuǎn)到中斷服務(wù)程序的匯編指令一定在某個(gè)位置,所以我們需要使用鏈接腳本來控制鏈接。
GNU-LD 在線文檔https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html
修改os.ld
在targets\STM32F103RC\GCC目錄下有一個(gè)os.ld鏈接腳本,這就是gcc工具鏈鏈接時(shí)所調(diào)用的,在“LiteOS_Lab Makefile分析”章節(jié)中向大家講解過Makefile中如何控制gcc鏈接時(shí)調(diào)用os.ld文件。
根據(jù)STM32F103Rx數(shù)據(jù)手冊可知其Flash起始地址為0x0800 0000,大小為256KB;RAM起始地址為0x2000 0000,大小為48KB,如果不想查閱芯片手冊也可以直接看之前我們通過STM32CubeMX生成的工程中的STM32F103RCTx_FLASH.ld得到以上數(shù)據(jù)。
首先修改第36行的esrack,這是棧頂?shù)刂罚话阍O(shè)置為RAM的結(jié)束地址,因?yàn)槭菨M減棧,通過RAM大小加上RAM的起始地址得到,48KB*1024B=49152B轉(zhuǎn)換為16進(jìn)制得到0xC000,起始地址為0x2000 0000加上0xC000得到0x2000 C000;修改第33行的RAM大小為48K,F(xiàn)lash為256K,如果你移植的目標(biāo)MCU不是我這個(gè)型號(hào),請你按照前面所述方式進(jìn)行修改,修改后如下圖所示。
鏈接腳本其余地方均保持原有即可,到這里就修改完成了,下一節(jié)可以開始創(chuàng)建工程了。
輕量級(jí)操作系統(tǒng) LiteOS IoT
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。