采用MAXQ1103評估套件和面向MAXQ30的CrossW

圖5.StepOver按鈕
CrossStudio通過JTAG電路板把應用程序下載到MAXQ1103中,Output窗口顯示狀態消息。應用程序將開始運行,然后,在代碼第一行停止(左側空白區顯示黃色箭頭)。運行應用程序時,單擊“Play”按鈕(或者選擇Debug
Go)。現在,請確定MAXQ1103電路板上的LED正在閃爍。您可能希望能夠在一定程度上修改應用程序。使LED按順序閃爍,或者改變點亮時間,更快或者更慢的閃爍。
使用CrossStudio調試應用程序
現在,讓我們了解一下MAXQ1103和CrossStudio工具的調試功能。MAXQ1103有內置JTAG引擎,支持在實際芯片上進行調試,從而不需要昂貴的仿真器或者有可能出錯的模擬器。注意,MAXQ1103還提供鎖定機制,在元件鎖定時,防止JTAG工作。這樣,當MAXQ1103微控制器用在敏感應用中時,保證了JTAG調試引擎不會帶來安全威脅。
現在,我們返回到最初的Blinky應用程序,在主函數中,把延時從500改到5:
delayms(5);
現在,構建并運行應用程序。注意,LED持續點亮,而不是不斷閃爍。這就是簡單演示代碼第一次編寫并運行時的情況。
這樣會帶來一個基本問題:“燈的確是連續點亮,還是閃爍非常快,而無法察覺呢”?如果燈是連續點亮,那就有必要檢查原理圖和引腳分配,確定一切OK。如果LED只是很快地閃爍(太快,以至于看不清間隔),那就只需要調整時間,這是可能需要做的工作。為回答這一問題,我們現在使用CrossStudio的調試工具。
按下Pause按鈕(或者選擇Debug
Break)。在代碼停止的地方,出現一個黃色箭頭。代碼很有可能停止在delayms()函數的‘for’循環中(參見圖6)。

圖6.在delayms()函數中,代碼停止運行
觀察右側的Locals窗口(如果看不到該窗口,單擊Debug
DebugWindows
Locals)。該窗口將顯示變量“x”和“count”的當前值。現在,按下StepOver按鈕幾次。在Locals窗口中,您應該看到x值增加了(可以連續按下StepOver,直到循環結束,但這可能需要很長的時間)。
現在,已經很容易回答“燈是在閃爍嗎”這一問題了?對此,需要在main函數的delayms(5)一行設置斷點,單擊該代碼行左側的小三角。它將變為紅圈(圖7)。現在,再次運行應用程序(Debug
Go,或者Play按鈕)。應用程序會運行到這一點,然后暫停。現在,點擊Go若干次后,您會看到,隨著您的點擊,燈接通和關斷。這驗證了燈是在閃爍,只是太快,我們的眼睛無法察覺。

圖7.加入斷點
現在,我們借這個機會了解一下更多的調試功能。按下StepOver按鈕幾次,按順序執行三行代碼:while(1),PO0=PO0^0x83和delayms(5)。您將看到,當通過PO0行時,燈閃爍。現在,當暫停在delayms(5)行時,按下StepInto按鈕(圖8),進入delayms()函數(而不是StepOver,這會執行整個函數)。

圖8.StepInto按鈕
在運行時,還可以改變變量(和寄存器)。清除所有斷點(Debug
Breakpoints
ClearAllBreakpoints),單擊Go。單擊Pause,程序應再次停止在delayms()函數的中間部分。注意“x”和“count”值。現在,把x設置為2499(單擊x顯示的數值,高亮后輸入2499)。執行幾次StepOver或者StepInto,您會看到循環結束,“count”值也遞減了。
以及您感興趣的其他調試功能:Debug
Disassembly將同時顯示C代碼和生成的匯編代碼。這樣,用戶可以進入匯編代碼,而不是C代碼,同時知道對應于C代碼的什么位置。
Debug
DebugWindows
CallStack將顯示應用程序到達當前位置時所調用的函數。如果在delayms()函數中暫停執行,其顯示如圖9所示。
使用Debug
Stop停止調試,觀察右側的Targets窗口。確定MaximSerialJTAGAdapter以粗體字顯示,觀察下面的配置選項。如果您使用串口,而不是默認的COM1,那么,可以在這里改變這一選項。











評論