色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何通過串口在Windows上進行顯示調試信息

電子設計 ? 作者:電子設計 ? 2018-11-01 09:42 ? 次閱讀

1 ROM版本目標系統的調試問題

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

如何通過串口在Windows上進行顯示調試信息

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

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

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

2 C函數的參數傳遞原理

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

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

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

表1

如何通過串口在Windows上進行顯示調試信息

對于像字符數組之類的指針參數,是將指針拷貝到堆棧中,而不是將數組中的所有內容傳送到堆棧中。比如,對函數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()的代碼上尚未執行,函數中的局部變量也是在堆棧中,所以在函數執行結束后,局部變量將消失。

表2 函數調用時的參數在堆棧中的存儲情況(X86環境)

如何通過串口在Windows上進行顯示調試信息

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

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機上的printf()函數的設計實現

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

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

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

void myprintf(char *fmt,…)

{

void *p;

char ch;

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

while(1){

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

if(ch= ='0')return;

putchar(ch);

};

ch=*fmt++;

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

/*因為字符參數傳遞時也轉換成整形參數傳遞,故同樣處理*/

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++);

}

/*顯示任意進制的數值,b為二、八、十、十六等進制數*/

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) /*以十六進制顯示1個數字*/

{

signed char i;

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

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

/*當10,11…時,顯示'a','b',…'f',*/

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

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

}

/*

*在很多嵌入式系統中,并不存在PC一樣的標準顯示設備,

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

*標系統中的LED、LCD等顯示器件。這樣,就可以在脫

*離開發系統情況下顯示調試信息,從而調試目標系統的軟

*件或硬件。

*/

void myputchar(int ch)

{

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

}

4 超級終端軟件的使用

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

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

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

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5086

    文章

    19140

    瀏覽量

    305867
  • ROM
    ROM
    +關注

    關注

    4

    文章

    575

    瀏覽量

    85812
  • WINDOWS
    +關注

    關注

    4

    文章

    3552

    瀏覽量

    88824
  • 編譯器
    +關注

    關注

    1

    文章

    1634

    瀏覽量

    49162
收藏 人收藏

    評論

    相關推薦

    使用Python進行串口通信的案例

    : python復制代碼 import serialimport time # 配置串口參數serial_port = '/dev/ttyUSB0' # Windows上可能是 'COM3' 或其他類
    的頭像 發表于 11-22 09:11 ?246次閱讀

    使用RS232串口進行設備調試的技巧

    重要角色。 1. 了解RS232的基本原理 進行設備調試之前,了解RS232的基本原理是非常重要的。RS232是一種單向或雙向的串行通信協議,它使用9個引腳來傳輸數據、控制信號和電源。了解這些引腳的功能和信號電平對于
    的頭像 發表于 11-21 09:38 ?632次閱讀

    為什么用函數發生器輸出的正弦波示波器上進行FFT顯示的頻譜中還有高次諧波?

    為什么用函數發生器輸出的正弦波示波器上進行FFT顯示的頻譜中還有高次諧波?請幫忙解答,謝謝!
    發表于 08-29 06:16

    ESP32 崩潰后調試信息定位到源碼方法

    arduino 通過調試信息定位出錯源碼
    的頭像 發表于 08-27 14:29 ?956次閱讀

    RA-T馬達工程串口直接啟動Workbench調試方案

    Workbench是瑞薩推薦的電機調試GUI,目前官方渠道介紹的使用方式需結合專用通訊板使用。本篇介紹的是不使用瑞薩專用通訊板或通訊電路的情況下,使用通用的USB轉串口設備啟動Workbench
    的頭像 發表于 08-03 08:06 ?504次閱讀
    RA-T馬達工程<b class='flag-5'>串口</b>直接啟動Workbench<b class='flag-5'>調試</b>方案

    更強的無線(雙)串口數據記錄 調試工具

    通過網絡可在線查看歷史日志(無需斷電),實時日志,無線調試;設計此工具的初心是希望可以替代傳統的usb轉串口工具,方便設備數據采集和串口數據記錄;溫馨提醒:文章最后
    的頭像 發表于 08-02 08:11 ?695次閱讀
    更強的無線(雙)<b class='flag-5'>串口</b>數據記錄 <b class='flag-5'>調試</b>工具

    借用J-link調試工具進行消息的發送

    幽默的小編先問大家一個問題:想讓我們的MCU打印出一段消息,需要怎么辦才能讓這段消息顯示PC端呢?相信大家最常用的方式是通過MCU的串口將消息打印到PC端的
    的頭像 發表于 07-16 15:00 ?510次閱讀
    借用J-link<b class='flag-5'>調試</b>工具<b class='flag-5'>進行</b>消息的發送

    STC串口驅動調試程序

    STC的串口驅動調試程序。
    發表于 07-08 14:23 ?3次下載

    使用jLink_windows_v796時,Jlink指令器顯示沒有通過USB連接探針,為什么?

    當我使用 jLink_windows_v796 時,Jlink 指令器顯示沒有通過 USB 連接探針。 無論我使用的是 7.9.8 版還是 7.8.8 版的 jlink,都會遇到這樣的信息
    發表于 07-05 08:18

    通過串口調試助手向模組發送AT指令,IPD回顯功能異常,無提示的原因?

    :2.0.0(WROOM-32) 問題1: 通過串口調試助手向模組發送AT指令,普通傳輸模式,數據接收模式為主動模式的情況下,服務端向模組發送數據,IPD回顯功能異常,無提示。遠端
    發表于 06-27 06:41

    IDF下ESP32C3如何使用調試串口接收消息?

    ESP32C3直接通過USB連接IO18,IO19,可以獲得一個調試串口,可以IDF下通過這個串口
    發表于 06-12 07:01

    使用AURIX Development StudioShieldBuddy TC275上進行調試報錯的原因?

    \"應用程序時出現了錯誤。 當我啟動調試器時,得到這樣一個錯誤對話框: 創建會話出錯 調試儀器 IO 無法初始化。 GDI 調試儀器提供了以下錯誤信息。 無法打開 Access
    發表于 05-27 07:32

    freertos啟用IAR自帶插件調試時不能查看隊列信息怎么解決?

    IAR平臺上調試freertos,想利用IAR自帶的freertos插件進行調試,但是只能看task的信息,不能看隊列
    發表于 05-07 06:54

    ELF 1開發環境中使用Qt Creator進行遠程調試

    進行操作。QtCreator會通過網絡連接到遠程設備,將調試信息傳輸回本地環境。接下來就為各位小伙伴詳細解析如何在ELF1開發環境下配置QtCreator,以實現
    的頭像 發表于 04-20 11:03 ?953次閱讀
    <b class='flag-5'>在</b>ELF 1開發環境中使用Qt Creator<b class='flag-5'>進行</b>遠程<b class='flag-5'>調試</b>

    ZDP1440串口屏應用開發如何使用虛擬串口調試

    ZDP1440串口屏應用開發如何使用虛擬串口調試呢?本文將詳細方法分享給大家。
    的頭像 發表于 01-25 11:32 ?1712次閱讀
    ZDP1440<b class='flag-5'>串口</b>屏應用開發如何使用虛擬<b class='flag-5'>串口</b><b class='flag-5'>調試</b>
    主站蜘蛛池模板: 99久久久久亚洲AV无码| 国产精品久久久久久久人热| 亚洲精品国产专区91在线| beeg日本老师| 久久久久久久网站| 亚洲精品一卡二卡三卡四卡2021 | 亚洲精品乱码久久久久久中文字幕 | 涩涩在线视频| 国产真实露脸乱子伦| 青草久久影院| 国产一区二区在线观看免费 | 麻美ゆま夫の目の前で犯| 成3d漫二区三区四区| 欧美精品一区二区在线电影| 厨房玩朋友娇妻中文字幕| 琪琪see色原网色原网站| 国产免国产免费| 正在播放国产尾随丝袜美女| 看黄色片子| 国产ZZJJZZJJ视频全免费| 牲高潮99爽久久久久777| 国产69精品麻豆久久久久| 一个人的免费完整在线观看HD| 欧美性情video sexo视频| MELODY在线播放无删减| 欧美乱码卡一卡二卡四卡免费| 国产人人为我我为人人澡| 91桃色污无限免费看| 美女黄图大全| 国产亚洲综合视频| 爱穿丝袜的麻麻3d漫画免费| 亚洲视频在线免费| 快播可乐网| 国产树林野战在线播放| avove旗袍丝袜高跟啪啪| 亚洲色噜噜狠狠网站| 色狠狠AV老熟女| 美女屁股软件| 超碰国产人人做人人爽| 一品道门在线视频| 丝瓜涩涩屋黄瓜香蕉丝瓜|