keil5的仿真調試


仿真調試的作用

  1.仿真調試實時跟蹤代碼的運行,逐步執行代碼,程序出現問題並能跟蹤到問題所在;
  2.設置調試斷掉,使程序運行到指定位置停下;
  3.能夠觀察全局變量的變化、寄存器的變化;
  4.可以查詢某個內存地址的存儲的數據;
  5.顯示調用棧的內容,也就是函數指針和局部變量;
  6.可以查詢片內外設和片外外設的寄存器變化,對照芯片手冊的相應寄存器的說明,便可以知道相應外設寄存器的值是否出錯。

調試界面常用按鈕


  以上為調試界面常用的按鈕

  以上為查看片內外設寄存器的操作,結合芯片手冊相應寄存器的說明,便可以明白相應外設寄存器的值是否符合預期。

編譯優化


  以上為將編譯器設置為-O2優化的方法,編譯器想盡辦法去壓縮程序存儲空間,提高運行速度。一般編譯器,優化有多個等級:-O0、-O1、-O2、-O3:
    -O0:默認優化級別,不壓縮程序存儲空間,不提高程序運行速度,保證程序的可靠執行;
    -O1:輕度優化,輕度壓縮程序存儲空間,輕度優化程序運行速度;
    -O2:推薦優化等級,在程序存儲空間和程序運行速度取得平衡點;
    -O3:最高級別的優化等級,有可能導致程序不能運行,也會使用以空間換時間的方法,導致程序體積增大。
-O0:

-O2

  以上為不優化和使用-O2優化編譯同一工程所產生的結果,可以看出使用-O2將輸出的可執行文件減小了10%,這還是很可觀的,所以能優化的時候盡量使用優化。

volatile關鍵字

  注意如果使用了-O2優化有些變量的定義就需要volatile關鍵字修飾,CPU去訪問被volatile修飾的變量時會小心翼翼去去實際所在的內存地址中去讀取它的值,而不是去讀取保存在寄存器中的備份, volatile往往應用在三種場合:
    1.多線程編程共享全局變量的時候,該全局變量要加上volatile進行修飾;
    2.裸機編程的時候,某函數與中斷服務函數共享全局變量的時候,該全局變量要加上volatile進行修飾,讓編譯器不要省略該變量的訪問;
    3.CPU訪問外設寄存器的時候,寄存器是指向一個地址,需要加上volatile進行修飾,表示讓CPU去該地址讀取值,而不是使用備份的值。

總結

  1.調試時如果要查看局部變量的值就不應使用優化,不然不能夠在Call Stack窗口中查看但局部變量的值;
  2.watch窗口只能跟蹤全局變量的值;
  3.延遲函數的計數值在使用-O2優化時,需要使用volatile修飾,不然會被優化而不能延遲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM