2011-08-31 53 views
2

我一直在尋找兩個小時的原因。現在我正在使用IAR Embedded Workbench Evaluation 5.30在CC430F6137開發套件板上進行調試。正如我已經聲明瞭一些全局靜態變量,我意識到我無法正確地觀察它。它們顯示爲FF或3F。使用IAR Embedded Workbench 430調試CC430F6137時無法看到靜態變量5.3

我試圖在內存表中查找它們,模式看起來像ff 3f ff 3f ....這種模式持續從0x1C00-0x1CFF;數據顯示在0x1D00 - 0x2BFF。根據CC430F6137的數據表,RAM的0段的範圍爲0x1C00 - 0x23FF,總共爲2KB。第1部分的範圍從0x2400到0x2BFF。

例如,根據觀察窗口,靜態變量位於0x1CED。但是,該值是0x3F。當我使用局部變量複製該靜態變量的值時,它不是0x3F。我的靜態變量位於第0部分的小邊界區域(具有奇怪的模式)。 我的硬件:TI的USB-MSP430調試接口。評估板是EM430F6137F900。

我試過模擬器,沒問題。我還用MSP430F449的靜態變量(TI LPT MSP430調試器)創建了一段簡單的代碼,還可以看到靜態變量。 有沒有人有任何想法爲什麼發生這種情況和可能的解決方案?提前致謝!

此bug已被固定在IAR最新版本的Embedded Workbench的

+0

你使用的是「靜態觀察窗口」嗎? EWB有一個單獨的窗口用於查看靜態數據。 – Clifford

+0

我嘗試了靜態觀察窗以及普通觀察窗。他們都顯示FF或3F。符號存儲器中的對應地址也是FF 3F模式 –

+1

我不知道什麼是錯誤的,但我可以給你一些關於如何找出問題的提示。首先,檢查鏈接器映射文件,確保變量確實放置在有RAM的地方,並確保鏈接器和調試器具有相同的世界視圖。其次,取消選中「run to main」框並單步執行cstartup代碼以驗證它是否正確初始化了內存(它應該清除DATA16_Z段並將DATA16_ID複製到DATA16_I)。 – Lindydancer

回答

1

這裏有幾個建議:


你使用RAM禁用功能在所有(RAMCTL)?

RAM存儲器由n個扇區組成。每個扇區都可以完全斷電以節省泄漏,但是,所有數據都會丟失。 RAM存儲器的功能包括:

•RAM存儲器有n個扇區,每個扇區2k字節。

•每個扇區0至n可以完全禁用,但數據保留丟失。

•如果可能,每個扇區0到n自動進入低功率保持模式。


使用任何睡眠模式?我正在考慮LPMx.5。

當輸入LPMx.5(LPM3.5或LPM4.5)時,電源管理模塊 (PMM)的電壓調節器處於關閉狀態。所有的RAM和寄存器內容都會丟失。


您寫道:

當我使用一個局部變量的值從靜止無功複製,然而,這不是0x3F的。

您的意思是說,在全局靜態或本地複製同時使副本和全局靜態工作時,本地副本不是0x3F?

如果複製使這兩個工作,我想靜態全局從不引用。做它volatile。生成地圖文件(項目 - >選項 - >鏈接器 - >列表,生成鏈接器列表,分段映射,模塊映射)。在Debug/List中查找映射文件並搜索您的全局靜態變量。它應該在DATA16_Z部分(或可能在DATA16_I部分中,在DATA16_ID中有一個相關插槽用於初始化值)。

如果不是那麼你有問題,我相信你可以在EW430_CompilerReference.pdf章節「段的描述」中找到有趣的信息。


您可以嘗試從調試器中寫入地址0x1CED嗎?您可以使用Memory窗口來測試並回讀。這將確認內存插槽本身正在工作。

如果不起作用,芯片的RAM可能損壞。這可以解釋爲什麼你有一個在0x1C00-0x1CFF範圍內的模式,但不在這之外。

+0

事實證明,這是IAR調試器中的一個錯誤。不管怎樣,謝謝你。 –

+0

IAR告訴過你嗎?如果你還沒有向他們報告過,你絕對應該這樣做。 – Gauthier

+0

他們已經修復了最新版本。 –