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

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

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

基于STM32CubeIDE的指定存儲(chǔ)話題

[復(fù)制鏈接]

502

主題

502

帖子

3383

積分

四級(jí)會(huì)員

Rank: 4

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

在鏈接文件中增加section:





或者這樣也行:





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


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






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



四、指定常量的存放地址



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


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

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

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

本版積分規(guī)則


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