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

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

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

3天內不再提示

單片機中如何實現打印彩色字符串

Q4MP_gh_c472c21 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2021-11-18 11:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是小麥,這次分享一個小技巧,打印帶顏色編碼的日志,希望對你有所幫助。

log的重要性

在項目開發中,日志可以幫助我們調試和發現產品中潛藏的問題,比如在發生錯誤的時候,打印相應的日志,定位發生錯誤的位置,通常我們需要日志滿足以下這些功能:

  • 不同的日志級別(TraceWarningInfoErrorfatal);
  • 能夠設置日志級別;
  • 基于日志級別的顏色編碼;
  • 占用空間小;
  • 可配置,可以完全禁用它;
  • 時間戳;
  • 易于集成;

下面,我們介紹一下如何在串口上打印出不同顏色的字符串。

打印彩色的log

在Stack Overflow上有人提出過類似的問題,如何在終端打印出彩色的字符?

這里給出了一個很簡單的C程序demo,我測試了一下,確實可以實現。

#include

#defineANSI_COLOR_RED"x1b[31m"
#defineANSI_COLOR_GREEN"x1b[32m"
#defineANSI_COLOR_YELLOW"x1b[33m"
#defineANSI_COLOR_BLUE"x1b[34m"
#defineANSI_COLOR_MAGENTA"x1b[35m"
#defineANSI_COLOR_CYAN"x1b[36m"
#defineANSI_COLOR_RESET"x1b[0m"

intmain(intargc,charconst*argv[]){

printf(ANSI_COLOR_RED"ThistextisRED!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_GREEN"ThistextisGREEN!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_YELLOW"ThistextisYELLOW!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_BLUE"ThistextisBLUE!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_MAGENTA"ThistextisMAGENTA!"ANSI_COLOR_RESET"
");
printf(ANSI_COLOR_CYAN"ThistextisCYAN!"ANSI_COLOR_RESET"
");

return0;
}

最終編譯之后運行得到的結果如下,發現打印的字符顏色發生了變化。

ANSI轉義序列

ANSI轉義序列(ANSI escape sequences)是一種帶內信號的轉義序列標準,用于控制視頻文本終端上的光標位置顏色其他選項。在文本中嵌入確定的字節序列,大部分以ESC轉義字符"["字符開始,終端會把這些字節序列解釋為相應的指令,而不是普通的字符編碼

所以,這里我們查了一下ascii碼表,可以發現ESC的碼值是十進制的27,也就是十六進制的0x1b,具體如下所示:

3fc5e212-481b-11ec-b939-dac502259ad0.pngascii碼表

所以轉義序列的格式如下:

401d621c-481b-11ec-b939-dac502259ad0.png轉自wiki

可以參考文檔:https://invisible-island.net/xterm/ctlseqs/ctlseqs.html

所以這里簡單舉個例子,設置不同的背景色:

#include

intmain(){

for(inti=0;i256;i++){

printf("x1b[48;5;%dm%03dx1b[0m",i,i);

if(i%10==0){
printf("
");
}
}
return0;
}

重點是這一句:printf("x1b[48;5;%dm %03d x1b[0m", i, i);簡單分析一下:

  • 其中x1b[ 是起始指令,后面的48表示設置背景色,38是前景色;
  • 48后面通常會跟一個;5;,這個是文檔中規定的,第一個%d,是設置色號,最后以m結尾;
403fcbd6-481b-11ec-b939-dac502259ad0.png參數設置
  • 第二個%03d是中間需要顯示的文本;
  • 最后以x1b[0m結束。

測試系統是Ubuntu 1804,最終的運行結果如下所示:

單片機中實現

單片機可以將日志通過串口打印出來,這時候需要顯示彩色字符,需要一個前提,就是串口終端軟件需要支持解析ANSI轉義序列

下面我做了簡單的實驗,通過STM32的串口,發送相應的字符,然后在PC端使用MobaXterm軟件打開串口并接收數據;因為這個軟件是支持ANSI序列的,所以最終可以顯示出不同顏色的字符串。具體如下所示:

總結

本文介紹了如何打印彩色字符串,其中簡單介紹了ANSI轉義序列,并且給出了幾個小的實驗結果,并在單片機上發送字符串到PC上,使用xterm串口終端,可以正常顯示設置前景色的字符串,結果符合預期。
責任編輯:haq


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

    關注

    6076

    文章

    45501

    瀏覽量

    670638
  • 終端
    +關注

    關注

    1

    文章

    1258

    瀏覽量

    31682
  • 日志
    +關注

    關注

    0

    文章

    146

    瀏覽量

    11066

原文標題:單片機打印日志還能這么玩?一招秀翻~

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    求助 LabVIEW 字符串比較

    請教大神 ,用一個字符串和多個字符串比較程序應該怎么做。 比如:A字符串和B字符串組(B組字符串個數不定可以是一個也可以是10個) 比較 A
    發表于 03-02 17:24

    打開工程后工程的字體沒有顯示,如字符串,數字等控件不能預覽顯示字體?

    打開工程后工程的字體沒有顯示,如字符串,數字等控件不能預覽顯示字體?
    發表于 02-25 17:39

    【RA-Eco-RA2E1-V1.0開發板試用】串口打印例程。

    本實驗基于瑞薩 RA 系列單片機完成UART 串口通信與printf 重定向功能實現,通過配置串口引腳、初始化驅動、編寫發送回調函數,實現了開發板與上位之間的數據收發,并可直接使用p
    的頭像 發表于 02-24 16:33 ?342次閱讀
    【RA-Eco-RA2E1-V1.0開發板試用】串口<b class='flag-5'>打印</b>例程。

    CH32V系列MCU單片機網絡小票打印機方案應用

    在智能零售與物聯網設備快速普及的今天,傳統小票打印機在連接靈活性、多終端協同及響應速度上面臨全新挑戰。為此,我們推出基于CH32V系列MCU單片機的高性能網絡小票打印機方案,以強大的核心處理能力與豐富的集成外設,為商用
    的頭像 發表于 01-21 16:31 ?698次閱讀
    CH32V系列MCU<b class='flag-5'>單片機</b>網絡小票<b class='flag-5'>打印</b>機方案應用

    字符串控件與靜態字符串控件預覽字符顯示亂碼,如何修改顯示正常?

    字符串控件與靜態字符串控件預覽字符顯示亂碼,如何修改顯示正常?
    發表于 01-20 17:17

    字符串,數字控件如何控制背景顏色和前景字體顏色?

    字符串,數字控件如何控制背景顏色和前景字體顏色?
    發表于 01-20 15:12

    Linux下怎么讓中文字符串按照拼音排序?

    求教 Linux 下怎么讓中文字符串按照拼音排序?
    發表于 01-06 07:40

    字符串關聯數字變量如何使用?我們的地址都是16位數據,可以使用16位數字變量顯示字符串嗎?

    字符串關聯數字變量如何使用?我們的地址都是16位數據,可以使用16位數字變量顯示字符串嗎?
    發表于 12-15 08:24

    單片機使用printf打印編譯出錯的原因?

    單片機使用printf打印編譯出錯,有哪些情況?
    發表于 11-21 06:02

    求助,關于C代碼的printf打印的疑問求解

    在使用E203 testbench執行附帶的benchmark測試用例時候,得到如下打印信息: CPU驗證小白一枚,有個問題不是很理解:黃色框框內的字符看起來應該是C代碼的printf語句
    發表于 11-10 07:54

    labview如何生成一個帶字符串返回的dll

    labview如何生成一個dll,如下圖,要求一個輸入,類型是字符串,返回類型也是字符串
    發表于 08-28 23:20

    在Python字符串逆序有幾種方式,代碼是什么

    對于一個給定的字符串,逆序輸出,這個任務對于python來說是一種很簡單的操作,畢竟強大的列表和字符串處理的一些列函數足以應付這些問題 了,今天總結了一下python對于字符串的逆序
    的頭像 發表于 08-28 14:44 ?1099次閱讀

    單片機怎么驅動電機?

    在各類自動化設備和智能裝置,電機是重要的執行部件,而單片機作為控制核心,需要通過特定的方式驅動電機運轉。單片機驅動電機并非直接連接即可,而是要根據電機類型和功率,搭配合適的驅動電路,才能實現
    的頭像 發表于 07-25 09:31 ?938次閱讀

    為啥51單片機能搞,峰岹的就會報錯呢?

    如圖圖1是stc系列單片機的代碼,發送字符串都可以,但是圖二峰岹的代碼發送字符串就不行,會報錯
    發表于 07-09 13:39

    harmony-utils之StrUtil,字符串工具類

    harmony-utils之StrUtil,字符串工具類 harmony-utils 簡介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實用工具類
    的頭像 發表于 07-03 11:32 ?638次閱讀