新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 系統(tǒng)調(diào)試信息的顯示方法

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

作者: 時(shí)間:2012-03-07 來源:網(wǎng)絡(luò) 收藏

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

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

1 ROM版本目標(biāo)的調(diào)試問題

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

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

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

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

2 C函數(shù)的參數(shù)傳遞原理

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

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

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

表1

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

char str[10]=“welcome”;

int i=100; float a=1.14;

……

fun(str,i,a);

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


上一頁 1 2 3 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉