国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過串口在Windows上進(jìn)行顯示調(diào)試信息

電子設(shè)計 ? 作者:電子設(shè)計 ? 2018-11-01 09:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 ROM版本目標(biāo)系統(tǒng)的調(diào)試問題

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

如何通過串口在Windows上進(jìn)行顯示調(diào)試信息

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

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

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

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

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

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

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

表1

如何通過串口在Windows上進(jìn)行顯示調(diào)試信息

對于像字符數(shù)組之類的指針參數(shù),是將指針拷貝到堆棧中,而不是將數(shù)組中的所有內(nèi)容傳送到堆棧中。比如,對函數(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);

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

表2 函數(shù)調(diào)用時的參數(shù)在堆棧中的存儲情況(X86環(huán)境)

如何通過串口在Windows上進(jìn)行顯示調(diào)試信息

表2說明了兩個問題:第一個問題是,每個參數(shù)在堆棧中的存儲長度和參數(shù)的類型有關(guān)。對于指針類型參數(shù),參數(shù)長度和編譯模式有關(guān):大模式下,地址包括段地址和偏移地址,共4字節(jié);而小模式下,地址只有段內(nèi)偏移,占2字節(jié)。第二個問題是,如果知道其中的一個參數(shù)地址和參數(shù)的類型,則可以得到任意參數(shù)的數(shù)值,并不需要知道參數(shù)的名稱。比如在函數(shù)fun()中,可用以下代碼顯示各個參數(shù)的內(nèi)容:

void fun(char *str,int i,float *a)

{

void *p

p=&str;

printf("str=%s",str); p=(char **)p+1;

printf("i=%d" ((int*)p));p=(int *)p+1;

printf("i=%d" *((float *)p));

}

3 PC機(jī)上的printf()函數(shù)的設(shè)計實現(xiàn)

現(xiàn)在,可以編寫自己的printf()函數(shù)了。以下給出TC20編譯環(huán)境下的具體實現(xiàn)代碼,在其他環(huán)境下,可以根據(jù)該原理進(jìn)行移植。也可以按位顯示二進(jìn)制數(shù)。對于其他類型,讀者可以根據(jù)需要增刪。

在實際應(yīng)用中,可以修改其中的putchar()函數(shù),將字符發(fā)到串口,就可以達(dá)到上述目的了。這里我們編寫的函數(shù)還增加了數(shù)字的二進(jìn)制顯示,這對于很多位域應(yīng)用是很有用處的。

/*printf()函數(shù)的實現(xiàn)代碼,為和庫函數(shù)區(qū)別,特在各函數(shù)前增加前綴“my”*/

void myprintf(char *fmt,…)

{

void *p;

char ch;

p=&fmt;p=(char**)p+1;/*指向堆棧中的下一個參數(shù)*/

while(1){

while((ch=*fmt++)!='%'{/*讀入格式字符串*/

if(ch= ='0')return;

putchar(ch);

};

ch=*fmt++;

switch(ch){ /*格式字符分析*/

/*因為字符參數(shù)傳遞時也轉(zhuǎn)換成整形參數(shù)傳遞,故同樣處理*/

case 'c':

case'd':

case'x':

case'0':

case'b':

if(ch= ='c')myputchar(*(int *)p));

if(ch= ='d')myprintn(*((int *)p),10);

if(ch= ='x')myprintn(*((int *)p),16);

if(ch= ='o')myprintn(*((int *)p),8);

if(ch= ='b')myprintn(*((int *)p),2);

p=(int)p+1; /*指針移動*/

break;

case's':

myputs(*((char **)p));

p=(char **)p+1; /*指針移動*/

break;

default;

};

}

}

void myputs(char str) /*顯示一個字符*/

{

while((*str)!='0')myputchar('str++);

}

/*顯示任意進(jìn)制的數(shù)值,b為二、八、十、十六等進(jìn)制數(shù)*/

void myprintn(int,n,int b)

{

if(b= =16){ myprintx(n); return; }

if(n<0){ myputchar('-'); n=-n; };

if(n/b)

myprintn(n/b,b);

myputchar(n%b+'0');

}

void myprintx(int n) /*以十六進(jìn)制顯示1個數(shù)字*/

{

signed char i;

for(i=3;i>=0;i--)

if(((n》i*4)&0x0f)>=10)

/*當(dāng)10,11…時,顯示'a','b',…'f',*/

myputchar(((n》i*4)&0x0f)-10+'a');

else myputchar(((n》i*4)&0x0f)+'0');

}

/*

*在很多嵌入式系統(tǒng)中,并不存在PC一樣的標(biāo)準(zhǔn)顯示設(shè)備,

*通過修改該函數(shù),可以將字符“ch”發(fā)送到串口,或者目

*標(biāo)系統(tǒng)中的LED、LCD等顯示器件。這樣,就可以在脫

*離開發(fā)系統(tǒng)情況下顯示調(diào)試信息,從而調(diào)試目標(biāo)系統(tǒng)的軟

*件或硬件。

*/

void myputchar(int ch)

{

……;/*此函數(shù)可供修改,將字符“ch”送到SBUF或其他顯示器件就可以了*/

}

4 超級終端軟件的使用

超級終端,即計算機(jī)顯示終端,是計算機(jī)系統(tǒng)的輸入、輸出設(shè)備。計算機(jī)顯示終端伴隨主機(jī)時代的集中處理模式而產(chǎn)生,并隨著計算技術(shù)的發(fā)展而不斷發(fā)展。迄今為止,計算技術(shù)經(jīng)歷了主機(jī)時代、PC時代和網(wǎng)絡(luò)計算時代這三個發(fā)展時期,終端與計算技術(shù)發(fā)展的三個階段相適應(yīng),應(yīng)用也經(jīng)歷了字符啞終端、圖形終端和網(wǎng)絡(luò)終端這三個形態(tài)。超級終端是一個通用的串行交互軟件,很多嵌入式應(yīng)用的系統(tǒng)有與之交換的相應(yīng)程序,通過這些程序,可以通過超級終端與嵌入式系統(tǒng)交互,使超級終端成為嵌入式系統(tǒng)的“顯示器”。

打開Windows的“超級終端”軟件,再打開“hypertrm”,新建一個終端會話。在該會話的“屬性\u35774設(shè)置\u32456終端仿真”菜單下,將終端仿真類型設(shè)置為VT100[5];在“屬性\u35774設(shè)置\u32456終端設(shè)置\u23383字符集”菜單下設(shè)置字符集為“ASCII”;在“屬性\u36830連接到\u37197配置\u24120常規(guī)\u26368最快速度”下設(shè)置通信波特率和目錄系統(tǒng)一致,并將該對話框下“僅以該速度連接打開”設(shè)置選中;在“屬性\u36830連接到\u37197配置\u36830連接\u36830連接首選項”下設(shè)置傳送數(shù)據(jù)位數(shù)、校驗方式。

超級終端的原理是將用戶輸入隨時發(fā)向串口(采用TCP協(xié)議時是發(fā)往網(wǎng)口,這里只說串口的情況),但并不顯示輸入。它顯示的是從串口接收到的字符。所以,嵌入式系統(tǒng)的相應(yīng)程序應(yīng)該完成的任務(wù)便是:

1、將自己的啟動信息、過程信息主動發(fā)到運行有超級終端的主機(jī);

2、將接收到的字符返回到主機(jī),同時發(fā)送需要顯示的字符(如命令的響應(yīng)等)到主機(jī)。

在用超級終端顯示時,唯一要求發(fā)送的數(shù)據(jù)必須以ASCII碼形式發(fā)送(上述printf()函數(shù)就是如此)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5198

    文章

    20449

    瀏覽量

    334052
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    579

    瀏覽量

    89077
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3702

    瀏覽量

    94050
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51610
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    串口調(diào)試助手跟變頻器怎么通訊

    串口調(diào)試助手與變頻器的通訊是工業(yè)自動化領(lǐng)域中常見的技術(shù)操作,其核心在于通過串口協(xié)議實現(xiàn)數(shù)據(jù)的雙向傳輸與控制。本文將圍繞硬件連接、參數(shù)配置、協(xié)議解析及常見問題排查等方面展開詳細(xì)說明,幫助
    的頭像 發(fā)表于 03-03 17:05 ?452次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b>助手跟變頻器怎么通訊

    【EASY EAI】基于瑞芯微RV1126B的串口調(diào)試

    1.串口調(diào)試1.1接線說明EASYEAINano-TB支持調(diào)試串口調(diào)試,相關(guān)硬件接口如下圖所示。串口
    的頭像 發(fā)表于 11-14 11:46 ?7229次閱讀
    【EASY EAI】基于瑞芯微RV1126B的<b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b>

    windows上用Eclipse IDE調(diào)試蜂鳥E203,用的開發(fā)板是哪個型號的?

    windows上用Eclipse IDE調(diào)試蜂鳥E203,用的開發(fā)板是哪個型號的,有哪位大佬調(diào)試出來了,求告知
    發(fā)表于 11-07 07:19

    【EASY EAI】基于瑞芯微RV1126B 的串口調(diào)試說明

    串口調(diào)試接線說明EASYEAINano-TB支持調(diào)試串口調(diào)試,相關(guān)硬件接口如下圖所示。串口
    的頭像 發(fā)表于 11-06 15:53 ?5177次閱讀
    【EASY EAI】基于瑞芯微RV1126B 的<b class='flag-5'>串口</b><b class='flag-5'>調(diào)試</b>說明

    蜂鳥處理器上進(jìn)行RT-Thread+ESP8266 wifi模塊開發(fā)

    無線通信,相比于網(wǎng)口傳輸更加便攜,功能更強(qiáng)大、開發(fā)更方便,基于串口控制的方式?jīng)Q定了其適合數(shù)據(jù)傳輸量不大,通信速率要求不高的情況,低功耗物聯(lián)網(wǎng)系統(tǒng)中被經(jīng)常使用。ESP8266模塊通過定制的AT指令集
    發(fā)表于 10-31 09:02

    Windows和Linux環(huán)境下分別使用Olimex和蜂鳥調(diào)試器下載程序

    Windows系統(tǒng)下使用Olimex ARM-USB-TINY-H調(diào)試器時,需要通過Zadig安裝olimex驅(qū)動程序。 ht
    發(fā)表于 10-31 08:26

    Windows下解決OpenOCD找不到設(shè)備及串口無法識別的方法

    RV-STAR開發(fā)板上使用的是一個雙端口的FT2232串口轉(zhuǎn)USB芯片,其中一個端口用于JTAG調(diào)試,另一個端口用于建立開發(fā)板到電腦的串口連接。 通常情況下,Windows系統(tǒng)會自動為
    發(fā)表于 10-20 11:25

    【上海晶珩睿莓1開發(fā)板試用體驗】2、系統(tǒng)信息+連接WIFI+SSH調(diào)試

    功。 電腦上ping一下,能通 啟用SSH 有了WIFI,我們就可以不用串口調(diào)試了。通過SSH,不僅能遠(yuǎn)程調(diào)試,還能
    發(fā)表于 08-17 09:55

    【干貨分享】M-K1HSE開發(fā)板上使用SecureCRT工具進(jìn)行調(diào)試

    SecureCRT是一款支持SSH協(xié)議的終端仿真軟件,可通過串口或網(wǎng)口對開發(fā)板系統(tǒng)信息進(jìn)行查看、對開發(fā)板系統(tǒng)進(jìn)行
    的頭像 發(fā)表于 08-12 08:07 ?1481次閱讀
    【干貨分享】<b class='flag-5'>在</b>M-K1HSE開發(fā)板上使用SecureCRT工具<b class='flag-5'>進(jìn)行</b><b class='flag-5'>調(diào)試</b>

    【M-K1HSE開發(fā)板免費體驗】系統(tǒng)調(diào)試工具 SecureCRT 的使用體驗

    SecureCRT 是一款支持 SSH協(xié)議的終端仿真軟件,可通過串口或網(wǎng)口對開發(fā)板系統(tǒng)信息進(jìn)行查看、對開發(fā)板系統(tǒng)進(jìn)行
    發(fā)表于 08-06 18:20

    如何在樹莓派 AI HAT+上進(jìn)行YOLO姿態(tài)估計?

    大家好,接下來會為大家開一個樹莓派5和YOLO的連載專題。內(nèi)容包括四個部分:樹莓派5上使用YOLO進(jìn)行物體和動物識別-入門指南樹莓派5上開啟YOLO姿態(tài)估計識別之旅!如何在樹莓派AIHAT+
    的頭像 發(fā)表于 07-20 20:34 ?1011次閱讀
    如何在樹莓派 AI HAT+<b class='flag-5'>上進(jìn)行</b>YOLO姿態(tài)估計?

    如何在樹莓派 AI HAT+上進(jìn)行YOLO目標(biāo)檢測?

    大家好,接下來會為大家開一個樹莓派5和YOLO的連載專題。內(nèi)容包括四個部分:樹莓派5上使用YOLO進(jìn)行物體和動物識別-入門指南樹莓派5上開啟YOLO姿態(tài)估計識別之旅!如何在樹莓派AIHAT+
    的頭像 發(fā)表于 07-19 08:34 ?1727次閱讀
    如何在樹莓派 AI HAT+<b class='flag-5'>上進(jìn)行</b>YOLO目標(biāo)檢測?

    如何通過串口調(diào)試助手通過USB口讀取電子標(biāo)簽信息和狀態(tài)?

    因為剛好項目上需要用到NFC標(biāo)簽所以想能夠通過USB口或者串口,用串口調(diào)試助手通過發(fā)命令的方式 讀取電子標(biāo)簽
    發(fā)表于 06-17 07:51

    加載示例圖像時,COM7的調(diào)試控制臺hello_world不顯示消息怎么解決?

    板是 mimxrt1180_evk。 我無法從板中找到 JP5。 使用示例映像進(jìn)行測試時,調(diào)試控制臺(通過 Windows11 電腦中的 J53、COM7 連接hello_world不
    發(fā)表于 03-25 07:01

    HarmonyOS NEXT 原生應(yīng)用/元服務(wù)-ArkTS代碼調(diào)試worker/taskpool調(diào)試

    開發(fā)者可通過worker或taskpool代碼上設(shè)置斷點,對worker/taskpool進(jìn)行斷點調(diào)試。 一、worker 調(diào)試 右鍵模塊
    發(fā)表于 03-13 17:46