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

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

搜索
查看: 128|回復(fù): 0
收起左側(cè)

基于STM32CubeIDE的指定存儲話題

[復(fù)制鏈接]

493

主題

493

帖子

3141

積分

四級會員

Rank: 4

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

在鏈接文件中增加section:





或者這樣也行:





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


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






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



四、指定常量的存放地址



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


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

最后提醒下,我們做段定義時有時可能會遇到地址不合適的問題,我們可以適當(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è)計思路!
點擊閱讀原文,查看更多分享。
回復(fù)

使用道具 舉報

發(fā)表回復(fù)

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

本版積分規(guī)則


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