|
意法半導(dǎo)體公司【簡稱ST】為STM32用戶提供了免費的編譯工具軟件STM32CubeIDE,時不時有人咨詢基于該環(huán)境下的指定存儲話題,這里專門聊聊該內(nèi)容,重點介紹如何實現(xiàn)針對變量、函數(shù)、文件、常量的指定存儲的實現(xiàn)方法,以供參考。
一、指定變量的RAM存放地址
先修改STM32CubeIDE的相關(guān)連接文件如下:【后面都會用到下面配置】
sjykolq4mpm64081494338.png (95.88 KB, 下載次數(shù): 1)
下載附件
保存到相冊
sjykolq4mpm64081494338.png
2024-10-13 00:55 上傳
在鏈接文件中增加section:
wwpmlqscobu64081494438.png (76.66 KB, 下載次數(shù): 0)
下載附件
保存到相冊
wwpmlqscobu64081494438.png
2024-10-13 00:55 上傳
cfsdgpalatb64081494538.png (49.32 KB, 下載次數(shù): 0)
下載附件
保存到相冊
cfsdgpalatb64081494538.png
2024-10-13 00:55 上傳
ac1kvkxgjtl64081494639.png (339.3 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ac1kvkxgjtl64081494639.png
2024-10-13 00:55 上傳
或者這樣也行:
xiv4y25c3fo64081494739.png (86.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊
xiv4y25c3fo64081494739.png
2024-10-13 00:55 上傳
w1n1iysfqd464081494839.png (354.26 KB, 下載次數(shù): 0)
下載附件
保存到相冊
w1n1iysfqd464081494839.png
2024-10-13 00:55 上傳
當(dāng)然,對于變量的指定存儲,不調(diào)整鏈接文件,直接給定地址借助指針的方式也是可以的。比方像下面這樣,不過要注意你指定使用的內(nèi)存空間是安全的,別跟其它堆棧區(qū)沖突了。
c1wy4opn32n64081494939.png (142.79 KB, 下載次數(shù): 0)
下載附件
保存到相冊
c1wy4opn32n64081494939.png
2024-10-13 00:55 上傳
二、指定函數(shù)的存放地址
下面嘗試將名為MX_I2C1_INIT()的函數(shù)存放在指定位置。
4on4utqbbik64081495040.png (188.54 KB, 下載次數(shù): 0)
下載附件
保存到相冊
4on4utqbbik64081495040.png
2024-10-13 00:55 上傳
a5vwiu4jpeg64081495140.png (112.7 KB, 下載次數(shù): 1)
下載附件
保存到相冊
a5vwiu4jpeg64081495140.png
2024-10-13 00:55 上傳
4wcdsfwyam564081495240.png (314.54 KB, 下載次數(shù): 1)
下載附件
保存到相冊
4wcdsfwyam564081495240.png
2024-10-13 00:55 上傳
三、指定文件的存放地址
下面嘗試將名為adc.c和gpio.c的目標(biāo)文件存放在指定位置。
vdy2q5mpif264081495340.png (128.16 KB, 下載次數(shù): 1)
下載附件
保存到相冊
vdy2q5mpif264081495340.png
2024-10-13 00:55 上傳
ol4yiivvqyj64081495440.png (263.8 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ol4yiivvqyj64081495440.png
2024-10-13 00:55 上傳
四、指定常量的存放地址
45l50n1su4w64081495541.png (113.92 KB, 下載次數(shù): 1)
下載附件
保存到相冊
45l50n1su4w64081495541.png
2024-10-13 00:55 上傳
iqf5orabj1564081495641.png (188.06 KB, 下載次數(shù): 0)
下載附件
保存到相冊
iqf5orabj1564081495641.png
2024-10-13 00:55 上傳
當(dāng)然,如果在section那里再指定地址的做法也可以:
liv55xpkax064081495741.png (47.79 KB, 下載次數(shù): 0)
下載附件
保存到相冊
liv55xpkax064081495741.png
2024-10-13 00:55 上傳
看到這里,有人或許好奇鏈接腳本中的keep關(guān)鍵字,如果不要會怎么樣呢?
這里使用 KEEP 關(guān)鍵字的主要目的是確保特定的段[section]在鏈接過程中不會被丟棄。即使這些段沒有被顯式引用,因為KEEP 關(guān)鍵字的存在而被強(qiáng)制保留段定義。換句話說,如果這些段沒有在代碼中被引用或使用,且在鏈接腳本中未加 KEEP ,那么相應(yīng)的段將會在鏈接過程中被丟棄。
我們不妨驗證下;谏厦娴呐渲,將keep拿掉,同時代碼中對定義的常量不做任何引用或使用。我們可以發(fā)現(xiàn)定義的常量段被丟棄了,即沒有在預(yù)定的地址為其安排存儲空間。
ehnucs20ky464081495841.png (46.35 KB, 下載次數(shù): 1)
下載附件
保存到相冊
ehnucs20ky464081495841.png
2024-10-13 00:55 上傳
最后提醒下,我們做段定義時有時可能會遇到地址不合適的問題,我們可以適當(dāng)調(diào)整地址數(shù)據(jù),不要跟默認(rèn)棧空間沖突了。還有,自定義段在鏈接腳本中的位置有時會涉及到有效性問題,具體設(shè)計時可以靈活調(diào)整段定義在腳本文件中的前后位置。
OK,今天的分享就到這里,下次再聊~!
猜你喜歡:
WiFi6+藍(lán)牙+星閃,三合一開發(fā)板,真香!
Github上熱門 C 語言項目匯總!
嵌入式,可測試性軟件設(shè)計!
一些低功耗軟件設(shè)計的要點!
嵌入式 C 保護(hù)結(jié)構(gòu)體的方式
實用 | 10分鐘教你通過網(wǎng)頁點燈
談?wù)勄度胧杰浖募嫒菪裕?/strong>
分享一個嵌入式代碼生成器設(shè)計思路!
點擊閱讀原文,查看更多分享。 |
|