1. 程式人生 > >如何在IAR中通過Watch視窗觀察區域性變數的值

如何在IAR中通過Watch視窗觀察區域性變數的值

原文地址:http://www.cnblogs.com/wx865220862/archive/2013/03/27/2984168.html

最近在用430開發一款產品,在軟體除錯的時候發現Watch視窗中無法觀察區域性變數的值,總是顯示<unavailable>,下面通過一個簡答的例子說明一下現象:

複製程式碼
#include "msp430g2553.h"

/* Global variable */
unsigned char ReceiveGlobal;

unsigned char addxy(unsigned char x,unsigned char y)
{
  unsigned char z;
  z 
= x+y; return z; } void main() { /* Local variable */ unsigned char Receive0; static unsigned char Receive1; volatile unsigned char Receive2; Receive0 = addxy(0,1); Receive1 = addxy(1,2); Receive2 = addxy(3,4); ReceiveGlobal = addxy(5,6); while(1); }
複製程式碼

  在while(1)處設一斷點,在Debug模式下通過Watch視窗觀察變數:

  現在回過頭去看IAR中的"Options — c/c++ compiler — Optimization[ˌɔptimaiˈzeiʃən]  Level" 選項:

  Level的預設值為Low,當我把Level選為None之後,即不執行任何優化時,全域性變數、靜態區域性變數、區域性變數的值都可以看到,如下圖所示。

  當我把優化等級選為Midium或者High之後,全域性變數、靜態區域性變數、區域性變數的值都不可見了。

  結論:要想觀察區域性變數的值,除錯的時候可以把優化等級設為None.

補充幾個知識點: 

  1. 堆疊(stack)——由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。
  2. 靜態儲存區(static)—— 全域性變數和靜態變數的儲存是放在一塊的。初始化的全域性變數和靜態變數在一塊區域;未初始化的全域性變數和靜態變數在相鄰的另一塊區域。程式結束後由系統釋放。 

相關推薦

如何在IAR通過Watch視窗觀察區域性變數的值

原文地址:http://www.cnblogs.com/wx865220862/archive/2013/03/27/2984168.html 最近在用430開發一款產品,在軟體除錯的時候發現Watch視窗中無法觀察區域性變數的值,總是顯示<unavailable>,下面通過一個簡答的例子

vue通過watch監聽資料變化,帶來的效能優化

問題背景 為什麼要用 vuex? 在使用 Vue 進行元件化開發時,元件通訊是一個十分重要的部分。在 Vue 中,父子元件的關係可以總結為 父子元件通訊:父元件通過 props 向下傳遞資料給子元件 子父元件通訊:子元件通過 events 給父元件傳送訊息 使

Android Studio除錯時無法watch區域性數值

在Android Studio中下斷點除錯時,可以在“Watches”視窗中檢視變數的。但是當要檢視的變數是區域性變數時,String path = getFilesDir().toString();在

IAR通過ICF指定某變數的地址 或者 通過語句指定

如果想定在rom空間 icf中: place at address mem:0x08090000 { readonlysection .test }; C:中: #pragma location = ".test" const u32 uiData[512];// cons

shell指令碼使用if和bc比較數值和指定值

【預備知識】 假如我有個日誌檔案,每天會往裡追加。日誌摘要如下—— 2018-06-12 09:08:56,105 - hdfs.client - INFO - Renaming ‘/apps/wps_prt_feature/business_info/20

Java MVC Controller 通過不同方式獲取 @PathVariable 引數值

1 @RequestMapping(value = "/test/{a}") 2 public @ResponseBody Object test(@PathVariable String a) { 3 4 return a; 5 } 2.需要通用@PathVa

AngularJS ng-model通過$watch動態取值

blog html lib brush google java logs con head 這個例子的意思是,當xxxx的長度不超過6時,xxxx和yyyy兩個input的model是無關的,但當xxxx超過6,則yyyy會跟隨其值而變化。 <!doctype

程序通過定義學生結構體量,存儲學生的學號、姓名和3門課的成績。函數fun的功能是:對形參b所指結構體的數據進行修改,並在主函數輸出修改後的數據。

一次 數據 mod long 成績 nbsp data 例如 main 程序通過定義學生結構體變量,存儲學生的學號、姓名和3門課的成績。函數fun的功能是:對形參b所指結構體變量中的數據進行修改,並在主函數中輸出修改後的數據。例如,若b所指變量t中的學號、姓名和三門課的成績

Java虛擬機器棧,棧幀,區域性量表的概念和特徵。

Java虛擬機器棧的特徵: 執行緒私有: 後進先出(LIFO)棧 java虛擬機器棧和程式計數器一樣,他是執行緒私有的記憶體區域,他的生命週期與執行緒相同,java虛擬機器棧描述的是java方法執行時

VC++6_0除錯篇:變數的觀察--watch視窗的技巧

        寫一下VC6的watch視窗的一些小技巧,對於除錯過程是非常有幫助的。VC6年紀已經很大了,微軟好像也不再支援,但是還是有很多人在用。我本人是非常喜歡它的小巧(相對vs2003,2005),佔資源少,即使這樣它的除錯功能仍然超級強,真是不錯。     

VC++6.0除錯篇:執行時間的觀察--watch視窗的技巧續

很簡單的程式碼,main函式中呼叫Sleep(1000)延時1000毫秒,再呼叫自定義的MyDelay(100)延時100毫秒,總共延時1100毫秒。在vc6中輸入程式碼後,在Sleep(1000)和return 0;這兩行各設定一個斷點,然後按F5進入除錯狀態。偵錯程式會停在Sleep(1000)這行。這時

FME通過HTMLExtractor向HTML要數據

名稱 ren pen 路徑 left 只需要 質數 span 正則表達式 如何不斷擴充數據中心的數據規模,提升數據挖掘的價值,這是我們思考的問題,數據一方面來自於內部生產,一部分數據可以來自於互聯網,互聯網上的數據體量龐大,形態多樣,之前blog裏很多FMEer已經提出了方

SQL Server2008通過SQL獲取表結構

nds 數據 join xtend isn val data 運行 order SQL Server2008中通過SQL獲取表結構 新增數據用戶,角色為public。映射到待獲取表結構的數據庫上,授與用戶在該數據庫上的身份為db_owner 運行例如以下SQL語

Android通過反射來設置Toast的顯示時間

ring margin ner manage etc short 延遲 lln sse 這個Toast的顯示在Android中的用途還是非常大的,同一時候我們也知道toast顯示的時間是不可控的。我們僅僅能改動他的顯示樣式和顯示的位置,盡管他提供了一個顯示時間的設置方法

java ++前後差別試題及靜態量一旦賦值不可改變

strong string 變量 void system 自身 mod span n) package javaTest; public class Increment { private static int k=0; public static void m

c++多個文件如何共用一個全局

calc 其它 pop 例子 頭文件 標準 關鍵字 word sin 例子: 頭文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 這些源文件都包含頭文件state.h。 需要定義一個全局變量

arm32位固定指令怎麽容納32位

固定 這就是 mar span 通過 idt mic 負責 tle 在ARM指令集匯編碼中。32位有效馬上數是通過______偶數位而間接得到的 A、循環左移 B、循環右移、 C、邏輯左移、 D、邏輯右移 答案為循環左移。為什麽?還有最好解釋一下邏輯移動和循環移動

在EXCEL如何讓一列數字成文本格式?就是想讓單元格的左上角一個綠綠的?

excel image 一個 splay wid 宋體 文本格式 margin -1 如何在EXCEL中如何讓一列數字變成文本格式?就是想讓單元格的左上角變一個綠綠的? 解決方案:將整列單元格格式設為文本,然後,選中該列,數據--分列--完成 詳細步驟: (1)選中1行或者

PHP常用的超全局量 表單get和post提交方式的區別 session與cookie的區別 GD庫是做什麽用的

屬性 過程 生成報表 用戶訪問 服務器 接收 file pla request PHP中常用的超全局變量 $_GET ----->get傳送方式$_POST ----->post傳送方式$_REQUEST ----->可以接收到get和post兩種方式的值

在Ubuntu通過update-alternatives切換軟件版本

best 若是 -i content open jdk res native usr iteye http://persevere.iteye.com/blog/1479524 update-alternatives是ubuntu系統中專門維護系統命令鏈接