色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 系統(tǒng)調試信息的顯示方法

          系統(tǒng)調試信息的顯示方法

          作者: 時間:2012-03-07 來源:網絡 收藏

          摘要:提出在目標脫離開發(fā)運行時,如何通過串口在Windows的超級終端軟件中的一個具體。該有助于改進質量、縮短周期。

          本文引用地址:http://cafeforensic.com/article/149495.htm

          1 ROM版本目標的調試問題

          一般的目標系統(tǒng)在開發(fā)工具環(huán)境下的調試并不困難,但最終系統(tǒng)必須脫離開發(fā)工具獨立運行,即使在開發(fā)工具環(huán)境下完全正常的系統(tǒng),ROM版本也往往會出現(xiàn)各種問題。原因有兩人:一是開發(fā)工具硬件環(huán)境和最終的目標硬件環(huán)境不完全相同;二是外部因素不同,實驗室中無法模擬現(xiàn)場的很多外部條件。對于硬件的調試,可以使用示波器等儀器;對于軟件的調試,一般則是軟件運行中的各種(如變量)。

          我們知道,C語言中的“printf()”函數是學習C語言的人最了解和熟悉的一個函數。很多C語言教材一開始就以“hello word”字符串來描述C語言的基本特片,其中唯一的語句就是調用“printf ()”函數。雖然該函數可以在屏幕上輸出,但一般的用戶軟件中只在調試時用它來顯示某些中間變量的結果,一旦程序調試完成,就將其刪除了,真正的應用信息(如菜單字符等)顯示往往其他的輸出函數。對于使用和學習C語言的程序員來說,printf()由于可以同時輸出不同類型的數據,因此,它的使用是軟件調試的重要手段之一。

          在TURBO C2.0編譯器中,printf()函數的實現(xiàn)依賴于操作系統(tǒng)。在嵌入式系統(tǒng)中,往往沒有操作系統(tǒng)或者操作系統(tǒng)不提供這個功能,也可能沒有顯示輸出部件,或顯示設備的空間有限,只能用于顯示應用信息。最常用的方法是通過目標系統(tǒng)的一個串口將信息發(fā)送給PC機來顯示,PC機上可以使用Windows的“超級終端”軟件接受和顯示信息,如圖1所示。

          這種系統(tǒng)的硬件很簡單,我們只說明軟件的實現(xiàn)方法。為此,我們必須設計專用的、可以顯示各種數據類型的printf()函數,以達到從串口或其他途徑輸出信息的目的。一般的C函數不同,printf()函數的參數數量和類型是可變的,這是編寫該函數的難點。要解決這個難是,必須先了解C函數參數傳遞的原理。

          2 C函數的參數傳遞原理

          C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統(tǒng)設計語言,編寫系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。因此,它的應用范圍廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,具體應用比如單片機以及嵌入式系統(tǒng)開發(fā)。

          C語言 avr單片機c語言高級程序設計是一種成功的系統(tǒng)描述語言,用C語言開發(fā)的UNIX操作系統(tǒng)就是一個成功的范例;同時C語言又是一種通用的程序設計語言,在國際上廣泛流行。世界上很多著名的計算公司都成功的開發(fā)了不同版本的C語言,很多優(yōu)秀的應用程序也都使用C語言開發(fā)的,它是一種很有發(fā)展前途的高級程序設計語言。

          在大部分情況下,C語言是通過堆棧存儲器來傳遞參數(也有例外,C51的小模式則通過寄存器傳遞參數)。對于非指針類型,傳遞的不是原來類型的數據,而是對參數進行了類型轉換,如字符類型(char)變成整型(int)拷貝到堆棧中、浮點類型(float)變成雙精度類型(double),如表1所列。表1中未列出的,則沒有轉換[4]。

          表1

          對于像字符數組之類的指針參數,是將指針拷貝到堆棧中,而不是將數組中的所有內容傳送到堆棧中。比如,對函數fun(char *STr,int i,float a)的調用:

          char str[10]=“welcome”;

          int i=100; float a=1.14;

          ……

          fun(str,i,a);

          各個參烽str,i在堆棧中按先右后左的次序存放,表2所列為調用函數fun( )開始時堆棧中的參數存放情況。此時函數fun()的代碼上尚未執(zhí)行,函數中的局部變量也是在堆棧中,所以在函數執(zhí)行結束后,局部變量將消失。


          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉