最近在用430開發(fā)一款產(chǎn)品,在軟件調(diào)試的時候發(fā)現(xiàn)Watch窗口中無法觀察局部變量的值,總是顯示,下面通過一個簡答的例子說明一下現(xiàn)象:
#include"msp430g2553.h"/*Globalvariable*/unsignedcharReceiveGlobal;unsignedcharaddxy(unsignedcharx,unsignedchary){unsignedcharz;z=x+y;returnz;}voidmain(){/*Localvariable*/unsignedcharReceive0;staticunsignedcharReceive1;volatileunsignedcharReceive2;Receive0=addxy(0,1);Receive1=addxy(1,2);Receive2=addxy(3,4);ReceiveGlobal=addxy(5,6);while(1);}1234567891011121314151617181920212223242526
在while(1)處設(shè)一斷點,在Debug模式下通過Watch窗口觀察變量:
現(xiàn)在回過頭去看IAR中的”O(jiān)ptions%20—%20c/c++%20compiler%20—%20Optimization[??ptimai?zei??n]%20—%20Level”%20選項:
Level的缺省值為Low,當我把Level選為None之后,即不執(zhí)行任何優(yōu)化時,全局變量、靜態(tài)局部變量、局部變量的值都可以看到,如下圖所示。
當我把優(yōu)化等級選為Midium或者High之后,全局變量、靜態(tài)局部變量、局部變量的值都不可見了。
結(jié)論:要想觀察局部變量的值,調(diào)試的時候可以把優(yōu)化等級設(shè)為None.
補充幾個知識點:
1.堆棧(stack)——由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。
2.靜態(tài)存儲區(qū)(static)—— 全局變量和靜態(tài)變量的存儲是放在一塊的。初始化的全局變量和靜態(tài)變量在一塊區(qū)域;未初始化的全局變量和靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后由系統(tǒng)釋放?!?/p>