電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 70|回復: 0
收起左側

基于STM32CubeIDE的指定存儲話題

[復制鏈接]

482

主題

482

帖子

2797

積分

三級會員

Rank: 3Rank: 3

積分
2797
跳轉到指定樓層
樓主
發(fā)表于 2024-10-12 11:38:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
意法半導體公司【簡稱ST】為STM32用戶提供了免費的編譯工具軟件STM32CubeIDE,時不時有人咨詢基于該環(huán)境下的指定存儲話題,這里專門聊聊該內(nèi)容,重點介紹如何實現(xiàn)針對變量、函數(shù)、文件、常量的指定存儲的實現(xiàn)方法,以供參考。
一、指定變量的RAM存放地址
先修改STM32CubeIDE的相關連接文件如下:【后面都會用到下面配置】

在鏈接文件中增加section:





或者這樣也行:





當然,對于變量的指定存儲,不調(diào)整鏈接文件,直接給定地址借助指針的方式也是可以的。比方像下面這樣,不過要注意你指定使用的內(nèi)存空間是安全的,別跟其它堆棧區(qū)沖突了。


二、指定函數(shù)的存放地址
下面嘗試將名為MX_I2C1_INIT()的函數(shù)存放在指定位置。






三、指定文件的存放地址
下面嘗試將名為adc.c和gpio.c的目標文件存放在指定位置。



四、指定常量的存放地址



當然,如果在section那里再指定地址的做法也可以:


看到這里,有人或許好奇鏈接腳本中的keep關鍵字,如果不要會怎么樣呢?
這里使用 KEEP 關鍵字的主要目的是確保特定的段[section]在鏈接過程中不會被丟棄。即使這些段沒有被顯式引用,因為KEEP 關鍵字的存在而被強制保留段定義。換句話說,如果這些段沒有在代碼中被引用或使用,且在鏈接腳本中未加 KEEP ,那么相應的段將會在鏈接過程中被丟棄。
我們不妨驗證下;谏厦娴呐渲茫瑢eep拿掉,同時代碼中對定義的常量不做任何引用或使用。我們可以發(fā)現(xiàn)定義的常量段被丟棄了,即沒有在預定的地址為其安排存儲空間。

最后提醒下,我們做段定義時有時可能會遇到地址不合適的問題,我們可以適當調(diào)整地址數(shù)據(jù),不要跟默認?臻g沖突了。還有,自定義段在鏈接腳本中的位置有時會涉及到有效性問題,具體設計時可以靈活調(diào)整段定義在腳本文件中的前后位置。
OK,今天的分享就到這里,下次再聊~!
猜你喜歡:
WiFi6+藍牙+星閃,三合一開發(fā)板,真香!
Github上熱門 C 語言項目匯總!
嵌入式,可測試性軟件設計!
一些低功耗軟件設計的要點!
嵌入式 C 保護結構體的方式
實用 | 10分鐘教你通過網(wǎng)頁點燈
談談嵌入式軟件的兼容性!
分享一個嵌入式代碼生成器設計思路!
點擊閱讀原文,查看更多分享。
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關閉

站長推薦上一條 /1 下一條


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表