www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 電源 > 數字電源
[導讀]上一講中我們學習了如何建立工程、匯編、連接工程,并獲得目標代碼,但是做到這一 步僅僅代表你的源程序沒有語法錯誤,至于源程序中存在著的其它錯誤,必須通過調試才能 發(fā)現并解決,事實上,除了極簡單的程序以外

上一講中我們學習了如何建立工程、匯編、連接工程,并獲得目標代碼,但是做到這一
步僅僅代表你的源程序沒有語法錯誤,至于源程序中存在著的其它錯誤,必須通過調試才能
發(fā)現并解決,事實上,除了極簡單的程序以外,絕大部份的程序都要通過反復調試才能得到
正確的結果,因此,調試是軟件開發(fā)中重要的一個環(huán)節(jié),這一講將介紹常用的調試命令、利
用在線匯編、各種設置斷點進行程序調試的方法,并通過實例介紹這些方法的使用。
一、常用調試命令
在對工程成功地進行匯編、連接以后,按Ctrl+F5 或者使用菜單Debug->Start/Stop Debug
Session 即可進入調試狀態(tài),Keil 內建了一個仿真CPU 用來模擬執(zhí)行程序,該仿真CPU 功
能強大,可以在沒有硬件和仿真機的情況下進行程序的調試,下面將要學的就是該模擬調試
功能。不過在學習之前必須明確,模擬畢竟只是模擬,與真實的硬件執(zhí)行程序肯定還是有區(qū)
別的,其中最明顯的就是時序,軟件模擬是不可能和真實的硬件具有相同的時序的,具體的
表現就是程序執(zhí)行的速度和各人使用的計算機有關,計算機性能越好,運行速度越快。
進入調試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化,Debug 菜單項中原來不能用的命
令現在已可以使用了,工具欄會多出一個用于運行和調試的工具條,如圖1 所示,Debug 菜
單上的大部份命令可以在此找到對應的快捷按鈕,從左到右依次是復位、運行、暫停、單步、
過程單步、執(zhí)行完當前子程序、運行到當前行、下一狀態(tài)、打開跟蹤、觀察跟蹤、反匯編窗
口、觀察窗口、代碼作用范圍分析、1#串行窗口、內存窗口、性能分析、工具按鈕等命令。
學習程序調試,必須明確兩個重要的概念,即單步執(zhí)行與全速運行。全速執(zhí)行是指一行程序執(zhí)行完以后緊接著執(zhí)行下一行程序,中間不停止,這樣程序執(zhí)行的速度很
快,并可以看到該段程序執(zhí)行的總體效果,即最終結果正確
還是錯誤,但如果程序有錯,則難以確認錯誤出現在哪些程
序行。單步執(zhí)行是每次執(zhí)行一行程序,執(zhí)行完該行程序以后
即停止,等待命令執(zhí)行下一行程序,此時可以觀察該行程序
執(zhí)行完以后得到的結果,是否與我們寫該行程序所想要得到
的結果相同,借此可以找到程序中問題所在。程序調試中,
這兩種運行方式都要用到。
使用菜單STEP 或相應的命令按鈕或使用快捷鍵F11 可
以單步執(zhí)行程序,使用菜單STEP OVER 或功能鍵F10 可以
以過程單步形式執(zhí)行命令,所謂過程單步,是指將匯編語言
中的子程序或高級語言中的函數作為一個語句來全速執(zhí)行。
按下F11 鍵,可以看到源程序窗口的左邊出現了一個黃色調試箭頭,指向源程序的第一
行,如圖2 所示。每按一次F11,即執(zhí)行該箭頭所指程序行,然后箭頭指向下一行,當箭頭
指向LCALL DELAY 行時,再次按下F11,會發(fā)現,箭頭指向了延時子程序DELAY 的第
一行。不斷按F11 鍵,即可逐步執(zhí)行延時子程序。
通過單步執(zhí)行程序,可以找出一些問題的所在,但是僅依靠單步執(zhí)行來查錯有時是困難
的,或雖能查出錯誤但效率很低,為此必須輔之以其它的方法,如本例中的延時程序是通過

圖1 調試工具條

圖2 調試窗口
將D2: DJNZ R6,D2 這一行程序執(zhí)行六萬多次來達到延時的目的,如果用按F11 六萬多
次的方法來執(zhí)行完該程序行,顯然不合適,為此,可以采取以下一些方法,第一,用鼠標在
子程序的最后一行( ret)點一下,把光標定位于該行,然后用菜單Debug->Run to Cursor line
(執(zhí)行到光標所在行),即可全速執(zhí)行完黃色箭頭與光標之間的程序行。第二,在進入該子
程序后,使用菜單Debug->Step Out of Current Function(單步執(zhí)行到該函數外),使用該命令
后,即全速執(zhí)行完調試光標所在的子程序或子函數并指向主程序中的下一行程序(這里是
JMP LOOP 行)。第三種方法,在開始調試的,按F10 而非F11,程序也將單步執(zhí)行,不同
的是,執(zhí)行到lcall delay 行時,按下F10 鍵,調試光標不進入子程序的內部,而是全速
執(zhí)行完該子程序,然后直接指向下一行“JMP LOOP”。靈活應用這幾種方法,可以大大提
高查錯的效率。
二、在線匯編
在進入Keil 的調試環(huán)境以后,如果發(fā)現程序有錯,可以直接對源程序進行修改,但是
要使修改后的代碼起作用,必須先退出調試環(huán)境,重新進行編譯、連接后再次進入調試,如
果只是需要對某些程序行進行測試,或僅需對源程序進行臨時的修改,這樣的過程未免有些
麻煩,為此Keil 軟件提供了在線匯編的能力,將光標定位于需要修改的程序行上,用菜單
Debug->Inline Assambly… 即可出現如
圖3 的對話框,在Enter New 后面的
編緝框內直接輸入需更改的程序語
句,輸入完后鍵入回車將自動指向下
一條語句,可以繼續(xù)修改,如果不再
需要修改,可以點擊右上角的關閉按
鈕關閉窗口。

[!--empirenews.page--]
三、斷點設置
程序調試時,一些程序行必須滿足一定的條件才能被執(zhí)行到(如程序中某變量達到一定
的值、按鍵被按下、串口接收到數據、有中斷產生等),這些條件往往是異步發(fā)生或難以預
先設定的,這類問題使用單步執(zhí)行的方法是很難調試的,這時就要使用到程序調試中的另一
種非常重要的方法——斷點設置。斷點設置的方法有多種,常用的是在某一程序行設置斷點,
設置好斷點后可以全速運行程序,一旦執(zhí)行到該程序行即停止,可在此觀察有關變量值,以
確定問題所在。在程序行設置/移除斷點的方法是將光標定位于需要設置斷點的程序行,使
用菜單Debug->Insert/Remove BreakPoint 設置或移除斷點(也可以用鼠標在該行雙擊實現同
樣的功能);Debug->Enable/Disable Breakpoint 是開啟或暫停光標所在行的斷點功能;
Debug->Disable All Breakpoint 暫停所有斷點;Debug->Kill All BreakPoint 清除所有的斷點設
置。這些功能也可以用工具條上的快捷按鈕進行設置。
除了在某程序行設置斷點這一基本方法以外,Keil 軟件還提供了多種設置斷點的方法,
按Debug->Breakpoints… 即出現一個對話框,該對話框用于對斷點進行詳細的設置,如圖4
所示。
圖4 中Expression 后的編緝框內用于輸入表達式,該表達式用于確定程序停止運行的條
件,這里表達式的定義功能非常強大,涉及到Keil 內置的一套調試語法,這里不作詳細說
明,僅舉若干實例,希望讀者可以舉一反三。
1) 在Experssion 中鍵入a==0xf7,再點擊Define 即定義了一個斷點, 注意,a 后有兩
個等號,意即相等。該表達式的含義是:如果a 的值到達0xf7 則停止程序運行。除

 

圖3 在線匯編窗口

使用相等符號之外,還可以使用>,>=,<,<=,!=(不等于),&(兩值按位與),&&(兩值相與)等運算符號。
2) 在Experssion 后中鍵入Delay 再點擊Define,其含義是如果執(zhí)行標號為Delay 的行則中斷。
3) 在Experssion 后中鍵入Delay,按Count后的微調按鈕,將值調到3,其意義是當第三次執(zhí)行到Delay 時才停止程序運行。
4) 在Experssion 后鍵入Delay , 在
Command 后鍵入printf(“SubRoutine
‘Delay’ has been Calledn”)主程序每次
調用Delay 程序時并不停止運行,但會
在輸出窗口Command 頁輸出一行字
符,即SubRoutine ‘Delay’ has been
Called。其中“n”的用途是回車換行,
使窗口輸出的字符整齊。
5) 設置斷點前先在輸出窗口的Command
頁中鍵入DEFINE int I,然后在斷點設
置時同4),但是Command 后鍵入printf(“SubRoutine ‘Delay’ has been Called %d
timesn”,++I),則主程序每次調用Delay 時將會在Command 窗口輸出該字符及被調
用的次數,如SubRoutine ‘Delay’ has been Called 10 times。
對于使用C 源程序語言的調試,表達式中可以直接使用變量名,但必須要注意,設置
時只能使用全局變量名和調試箭頭所指模塊中的局部變量名。
四、實例調試
為進行程序的調試,我們首先給源程序制造一個錯誤,將延時子程序的第三行“DJNZ
R6,$”后的$改為D1,然后重新編譯,由于程序中并無語法錯誤,所以編譯時不會有任何出
錯提示,但由于轉移目的地出錯,所以子程序將陷入無限循環(huán)中。
進入調試狀態(tài)后,按F10 以過程單步的形式執(zhí)行程序,當執(zhí)行到LCALL DELAY 行時,
程序不能繼續(xù)往下執(zhí)行,同時發(fā)現調試工具條上的Halt 按鈕變成了紅色,說明程序在此不
斷地執(zhí)行著,而我們預期這一行程序執(zhí)行完后將停止,這個結果與預期不同,可以看出所調
用的子程序出了差錯。為查明出錯原因,按Halt 按鈕使程序停止執(zhí)行,然后按RST 按鈕使
程序復位,再次按下F10 單步執(zhí)行,但在執(zhí)行到LCALL DELAY 行時,改按F11 鍵跟蹤到
子程序內部(如果按下F11 鍵沒有反應,請在源程序窗口中用鼠標點一下),單步執(zhí)行程序,

可以發(fā)現在執(zhí)行到“DJNZ R6,D1”行時,程序不斷地從這一行轉移到上一行,同時觀察
左側的寄存器的值,會發(fā)現R6 的值始終在FFH 和FEH 之間變化,不會減小,而我們的預
期是R6 的值不斷減小,減到0 后往下執(zhí)行,因此這個結果與預期不符,通過這樣的觀察,
不難發(fā)現問題是因為標號寫錯而產生的,發(fā)現問題即可以修改,為了驗證即將進行的修改是
否正確,可以先使用在線匯編功能測試一下。把光標定位于程序行“DJNZ R6,D1”,打開
在線匯編的對話框,將程序改為“DJNZ R7,0EH”,即轉回本條指令所在行繼續(xù)執(zhí)行,其中
0EH 是本條指令在程序存儲器中的位置,這個值可以通過在線匯編窗口看到,如圖3 所示。
然后關閉窗口,再進行調試,發(fā)現程序能夠正確地執(zhí)行了,這說明修改是正確的。注意,這
時候的源程序并沒有修改,此時應該退出調試程序,將源程序更改過來,并重新編譯連接,
以獲得正確的目標代碼。

 

圖4 斷點設置對話框

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉