keil2c语言使用教程,Keil教程(2)
置時同 4),但是 Command 后鍵入 printf(“SubRoutine ?‘Delay’ has ?been ?Called ?%d times\n”,++I),則主程序每次調用 Delay 時將會在 Command 窗口輸出該字符及被調 用的次數,如 SubRoutine ‘Delay’has been Called 10 times。
對于使用 C ?源程序語言的調試,表達式中可以直接使用變量名,但必須要注意,設置
時只能使用全局變量名和調試箭頭所指模塊中的局部變量名。
四、實例調試
為進行程序的調試,我們首先給源程序制造一個錯誤,將延時子程序的第三行“DJNZ R6,$”后的$改為 D1,然后重新編譯,由于程序中并無語法錯誤,所以編譯時不會有任何出 錯提示,但由于轉移目的地出錯,所以子程序將陷入無限循環中。
進入調試狀態后,按 F10 以過程單步的形式執行程序,當執行到 LCALL DELAY 行時,
程序不能繼續往下執行,同時發現調試工具條上的 Halt ?按鈕變成了紅色,說明程序在此不 斷地執行著,而我們預期這一行程序執行完后將停止,這個結果與預期不同,可以看出所調 用的子程序出了差錯。為查明出錯原因,按 Halt 按鈕使程序停止執行,然后按 RST 按鈕使 程序復位,再次按下 F10 單步執行,但在執行到 LCALL ?DELAY 行時,改按 F11 鍵跟蹤到
子程序內部(如果按下 F11 鍵沒有反應,請在源程序窗口中用鼠標點一下),單步執行程序,
可以發現在執行到“DJNZ??? R6,D1”行時,程序不斷地從這一行轉移到上一行,同時觀察 左側的寄存器的值,會發現 R6 的值始終在 FFH 和 FEH 之間變化,不會減小,而我們的預 期是 R6 的值不斷減小,減到 0 后往下執行,因此這個結果與預期不符,通過這樣的觀察, 不難發現問題是因為標號寫錯而產生的,發現問題即可以修改,為了驗證即將進行的修改是
否正確,可以先使用在線匯編功能測試一下。把光標定位于程序行
“DJNZ???????????????????????????? R6,D1”,打開
在線匯編的對話框,將程序改為“DJNZ ?R7,0EH”,即轉回本條指令所在行繼續執行,其中
0EH 是本條指令在程序存儲器中的位置,這個值可以通過在線匯編窗口看到,如圖 3 所示。 然后關閉窗口,再進行調試,發現程序能夠正確地執行了,這說明修改是正確的。注意,這 時候的源程序并沒有修改,此時應該退出調試程序,將源程序更改過來,并重新編譯連接,
以獲得正確的目標代碼。
總結
以上是生活随笔為你收集整理的keil2c语言使用教程,Keil教程(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017c 语言程序设计,C语言程序设计
- 下一篇: android 自定义banner,An