變量是程序中重要的一部分,產品中很多業務代碼都是變量起到了關鍵作用。
傳感器采集的數據、通信中傳輸的數據、算法中的數據等這些數據都需要借助變量這個東西來實現。
我們為什么要將變量、數組(例如表或函數)存儲到特定的地址?
因為有些特殊的數據可能需要指定地址,比如加密的密鑰、校驗和等這些數據可能需要存儲在指定內存。
1
變量查看工具
在描述將變量儲存在指定內存地址之前,我們先來描述一下查看變量的工具(通過工具可以查看變量的值)
1.STMStudio
之前給大家分享過《STM Studio調試和診斷工具講解》。
這里簡單說一下STMStudio與本文相關的內容:變量。
STMStudio可管理四種變量:
1.由物理存儲地址標識的絕對變量。
2.能夠計算絕對變量的最小值、最大值、平均值和標準差等值的統計變量。
3.表達式變量是數學表達式計算的結果。表達式是絕對變量或統計變量與數學運算符(+,-,*,/…)的組合,例如:(Variable1+Variable2)*Variable3。注意,表達式變量是在統計變量之后求值的,因此不可能計算表達式的統計值。
4.包含用戶可配置信息的插件變量。
(為了節約時間,使用有道翻譯的句子,大家請結合原文理解)
可以看得出來,局部變量是不支持的。
2.J-Scope
這個STMStudio工具和J-Scope有類似之處,也能查看變量、波形:
J-Scope也是一個不錯的工具,大家可以下載安裝試試:
https://www.segger.com/products/debug-probes/j-link/tools/j-scope
2
Keil MDK如何將變量存儲在指定內存地址?
不同的編譯器,實現的方法可能不同,這里主要結合MDK說下基于AC5和AC6編譯,簡述其中的方法。
1.針對AC5(ARMCC Compiler version 5.x)
定義一個變量cnt到指定內存地址:0x20008000
uint8_t cnt __attribute__((at(0x20008000)));
2.針對AC6(ARM Compiler 6 (又名ARMCLANG))
定義一個變量cnt到指定內存地址:0x20008000
uint8_t cnt __attribute__((section(".ARM.__at_0x20008000")));
這個地方進行分段:
這樣指定內存地址,即可使用STMStudio進行查看指定地址變量了:
好了,先寫到這里,希望對大家有幫助。
責任編輯:lq
-
編譯器
+關注
關注
1文章
1658瀏覽量
50024 -
變量
+關注
關注
0文章
614瀏覽量
28869 -
數組
+關注
關注
1文章
419瀏覽量
26442
原文標題:Keil MDK如何將變量存儲在指定內存地址
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
在starvision2上移植FreeRTOS,objdump后發現static變量的地址是0,怎么解決?
數組的下標為什么可以是負數
從輸入IP地址到生成街道級的地理位置,有哪些“看不見”的步驟?

評論