|
關(guān)注+星標公眾號,不錯過精彩內(nèi)容
作者 | strongerHuang
微信公眾號 | 嵌入式專欄
嵌入式學習、做項目,經(jīng)常都會用到串口,而用串口最多的時候,就是類似 printf 這種打印輸出的時候。
比如:打印輸出日志信息
打印輸出調(diào)試信息查看實時數(shù)據(jù)等
而 printf 基本都會用到“重定向串口” ,本文結(jié)合這個問題,來簡單分享一下相關(guān)內(nèi)容。嵌入式開發(fā)重定向串口的幾種方法
分享“重定向串口”之前,我們先說說幾種常見的 printf 方式。之前給大家分享的【打印輸出系列教程】其中就提到了,針對MCU的printf打印輸出,常見的方式:1.UART打印輸出2.仿真打印輸出3.SWO打印輸出4.JLink-RTT打印輸出
額外還有一些專有的調(diào)試診斷工具,比如:
5.STM Studio打印輸出變量
6.STM32CubeMonitor打印輸出變量
當然,以上系列教程主要是針對MCU而言,這里說說針對嵌入式開發(fā)的一些常見“重定向”串口的方法。
一、C語言中 printf 重定向在嵌入式C語言中,printf函數(shù)通常用于向控制臺輸出數(shù)據(jù)。但在沒有顯示器的嵌入式系統(tǒng)中,可以通過將stdout(標準輸出)重定向到串口,實現(xiàn)printf的串口輸出。
實現(xiàn)方法:重新定義fputc函數(shù),使其將字符通過串口發(fā)送出去。這樣,每當printf函數(shù)調(diào)用時,就會調(diào)用重新定義的fputc函數(shù),從而將數(shù)據(jù)發(fā)送到串口。
由于單片機性能相對要弱一點針對單片機,我們一般使用微庫(不是標準C庫函數(shù))。
ppbwcwsdnbt64058829213.png (177.89 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ppbwcwsdnbt64058829213.png
2024-12-3 07:37 上傳
大部分集成開發(fā)環(huán)境(IDE)中都有【使能】微庫的選項。
具體重定向代碼如下:int fputc(int ch, FILE *f){ USART_SendByte((uint8_t)ch);
return ch;}
為了方便大家理解,以上提供的是比較簡略的代碼,還有,不同單片機以及不同環(huán)境下,可能略有差異。
二、shell終端重定向在嵌入式Linux系統(tǒng)中,可以通過修改inittab文件或cmdline參數(shù)來將shell終端重定向到指定串口。例子:在嵌入式Linux系統(tǒng)中,將shell終端重定向到ttyGS0串口:# 修改/etc/inittab文件vim /etc/inittab
# 找到類似下面的行,并將其修改為指向新的串口# console::respawn:/sbin/getty -L console 115200 vt100ttyGS0::respawn:/sbin/getty -L ttyGS0 115200 vt100在uboot階段通過cmdline參數(shù)指定console到新的串口:console=ttyGS0,115200n8
三、freopen 重定向標準輸出到串口設備文件這種方法在Linux開發(fā)中比較常見,通過使用 freopen 函數(shù)來重定向標準輸出(stdout)到一個串口設備文件。
比如將 stdout 重定向到串口設備文件(例如 /dev/ttyS0):#include #include
int main() { // 串口設備文件的路徑,例如 /dev/ttyS0 const char *serial_port = "/dev/ttyS0"; // 使用 freopen 重定向 stdout 到串口設備文件 FILE *new_stdout = freopen(serial_port, "w", stdout); if (new_stdout == NULL) { perror("freopen failed"); return EXIT_FAILURE; }
// 測試輸出到串口 printf("Hello, serial port!
");
return EXIT_SUCCESS;}
今天就分享這么多,還有更多方法,歡迎大家留言說說!
------------ END ------------
51yeaecxqan64058829313.gif (71.87 KB, 下載次數(shù): 0)
下載附件
保存到相冊
51yeaecxqan64058829313.gif
2024-12-3 07:37 上傳
●專欄《嵌入式工具》
●專欄《嵌入式開發(fā)》
●專欄《Keil教程》
●嵌入式專欄精選教程
關(guān)注公眾號回復“加群”按規(guī)則加入技術(shù)交流群,回復“1024”查看更多內(nèi)容。
點擊“閱讀原文”查看更多分享。 |
|