
將變量、數(shù)組(例如表或函數(shù))存儲到特定地址的原因有很多。
校驗和可能需要位于某個地址,可能需要將函數(shù)放在特定的內(nèi)存位置,根據(jù)使用的編譯器,可以選擇設(shè)置特定的內(nèi)存區(qū)域。
這個問題是在前面分享文章《STM32開發(fā)工具之STM Studio調(diào)試和診斷工具講解》之后,有讀者提出來的問題。
我需要在固定的內(nèi)存地址找到一個變量,如何使用C源代碼執(zhí)行此操作?
一、回顧STMStudio
前不久分享STMStudio文章之后,很多朋友對這個工具比較感興趣,也第一時間下來安裝使用了該工具。
這里簡單說一下STMStudio與本文相關(guān)的內(nèi)容:變量。
STMStudio可管理四種變量:
?由物理存儲地址標(biāo)識的絕對變量。
?能夠計算絕對變量的最小值、最大值、平均值和標(biāo)準(zhǔn)差等值的統(tǒng)計變量。
?表達式變量是數(shù)學(xué)表達式計算的結(jié)果。表達式是絕對變量或統(tǒng)計變量與數(shù)學(xué)運算符(+,-,*,/…)的組合,例如:(Variable1+Variable2)*Variable3。注意,表達式變量是在統(tǒng)計變量之后求值的,因此不可能計算表達式的統(tǒng)計值。
?包含用戶可配置信息的插件變量。
(為了節(jié)約時間,使用有道翻譯的句子,大家請結(jié)合原文理解)

可以看得出來,局部變量是不支持的。
J-Scope
這個STMStudio工具和J-Scope有類似之處,也能查看變量、波形:


J-Scope也是一個不錯的工具,大家可以下載安裝試試:
https://www.segger.com/products/debug-probes/j-link/tools/j-scope
二、回歸主題
如何將變量存儲在指定內(nèi)存地址?
不同的編譯器,會有不同的方法,這里主要結(jié)合MDK說下基于AC5和AC6編譯,簡述其中的方法。
結(jié)合STM32F103ZE,有64K(0x10000)內(nèi)存。
1.針對AC5(ARMCC Compiler version 5.x)
定義一個變量cnt到指定內(nèi)存地址:0x20008000
uint8_t cnt __attribute__((at(0x20008000)));
2.針對AC6(ARM Compiler 6 (又名ARMCLANG))
定義一個變量cnt到指定內(nèi)存地址:0x20008000
uint8_t cnt __attribute__((section(".ARM.__at_0x20008000")));
這個地方進行分段:

這樣指定內(nèi)存地址,即可使用STMStudio進行查看指定地址變量了:

好了,先寫到這里,希望對大家有幫助。
-
ARM
+關(guān)注
關(guān)注
135文章
9553瀏覽量
391913 -
keil
+關(guān)注
關(guān)注
69文章
1230瀏覽量
172648 -
MDK
+關(guān)注
關(guān)注
4文章
211瀏覽量
33646
發(fā)布評論請先 登錄
使用 Keil Studio for Visual Studio Code開發(fā) STM32 設(shè)備
【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】+讀深入理解Linux內(nèi)核內(nèi)存分配
有新版keil MDK-ARM V5 注冊機安裝包不,孩子下載keil卡在許可碼過期了,救救孩子吧
LAT1185+一個地址未對齊引起的 HardFault 異常應(yīng)用筆記
聊聊MCU下載算法在Keil MDK里的那些事兒
不同位數(shù)的CPU的變量所占的內(nèi)存
在Keil5中查看棧大小
CW32 MCU用什么IDE開發(fā)?
如何將某個函數(shù)或變量放在固定的地址 ?
請問Modus Toolbox下針對CYW20719B2編程,能否指定全局變量地址?
從Keil MDK到IAR EWARM:通過工程遷移實現(xiàn)項目資產(chǎn)的更好管理
如何將變量存儲在指定內(nèi)存地址 (基于Keil MDK-ARM)
評論