一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

單片機(jī)中如何實(shí)現(xiàn)打印彩色字符串

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

掃碼添加小助手

加入工程師交流群

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

log的重要性

在項目開發(fā)中,日志可以幫助我們調(diào)試和發(fā)現(xiàn)產(chǎn)品中潛藏的問題,比如在發(fā)生錯誤的時候,打印相應(yīng)的日志,定位發(fā)生錯誤的位置,通常我們需要日志滿足以下這些功能:

  • 不同的日志級別(TraceWarning、InfoError、fatal);
  • 能夠設(shè)置日志級別;
  • 基于日志級別的顏色編碼;
  • 占用空間?。?/li>
  • 可配置,可以完全禁用它;
  • 時間戳;
  • 易于集成;

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

打印彩色的log

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

這里給出了一個很簡單的C程序demo,我測試了一下,確實(shí)可以實(shí)現(xiàn)。

#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;
}

最終編譯之后運(yùn)行得到的結(jié)果如下,發(fā)現(xiàn)打印的字符顏色發(fā)生了變化。

ANSI轉(zhuǎn)義序列

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

所以,這里我們查了一下ascii碼表,可以發(fā)現(xiàn)ESC的碼值是十進(jìn)制的27,也就是十六進(jìn)制的0x1b,具體如下所示:

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

所以轉(zhuǎn)義序列的格式如下:

401d621c-481b-11ec-b939-dac502259ad0.png轉(zhuǎn)自wiki

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

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

#include

intmain(){

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

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

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

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

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

測試系統(tǒng)是Ubuntu 1804,最終的運(yùn)行結(jié)果如下所示:

單片機(jī)中實(shí)現(xiàn)

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

下面我做了簡單的實(shí)驗(yàn),通過STM32的串口,發(fā)送相應(yīng)的字符,然后在PC端使用MobaXterm軟件打開串口并接收數(shù)據(jù);因?yàn)檫@個軟件是支持ANSI序列的,所以最終可以顯示出不同顏色的字符串。具體如下所示:

總結(jié)

本文介紹了如何打印彩色字符串,其中簡單介紹了ANSI轉(zhuǎn)義序列,并且給出了幾個小的實(shí)驗(yàn)結(jié)果,并在單片機(jī)上發(fā)送字符串到PC上,使用xterm串口終端,可以正常顯示設(shè)置前景色的字符串,結(jié)果符合預(yù)期。
責(zé)任編輯:haq


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

    關(guān)注

    6067

    文章

    44992

    瀏覽量

    650580
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1204

    瀏覽量

    30909
  • 日志
    +關(guān)注

    關(guān)注

    0

    文章

    144

    瀏覽量

    10869

原文標(biāo)題:單片機(jī)打印日志還能這么玩?一招秀翻~

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    字符串在數(shù)據(jù)庫的存儲方式

    數(shù)據(jù)庫是現(xiàn)代信息技術(shù)存儲和管理數(shù)據(jù)的核心組件。字符串作為最常見的數(shù)據(jù)類型之一,在數(shù)據(jù)庫的存儲方式對其性能和可擴(kuò)展性有著重要影響。 數(shù)據(jù)類型 固定長度字符串 :如CHAR類型,它為每
    的頭像 發(fā)表于 01-07 15:41 ?827次閱讀

    字符串在編程的應(yīng)用實(shí)例

    常以字符串的形式出現(xiàn)。例如,在命令行程序,用戶輸入的命令和參數(shù)都是字符串。 輸出信息 :程序也經(jīng)常需要向用戶顯示信息,這些信息同樣可以以字符串的形式呈現(xiàn)。例如,
    的頭像 發(fā)表于 01-07 15:33 ?717次閱讀

    字符串字符數(shù)組的區(qū)別

    在編程語言中,字符串字符數(shù)組是兩種基本的數(shù)據(jù)結(jié)構(gòu),它們都用于存儲和處理文本數(shù)據(jù)。盡管它們在功能上有一定的重疊,但在內(nèi)部表示、操作方式和使用場景上存在顯著差異。 1. 內(nèi)部表示 字符串 字符串
    的頭像 發(fā)表于 01-07 15:29 ?1144次閱讀

    字符串反轉(zhuǎn)的實(shí)現(xiàn)方式

    在編程,字符串反轉(zhuǎn)是一個基礎(chǔ)而重要的操作,它涉及到將一個字符串字符順序顛倒過來。這個操作在多種編程語言中都有不同的
    的頭像 發(fā)表于 01-07 15:27 ?819次閱讀

    字符串處理方法 字符串轉(zhuǎn)數(shù)字的實(shí)現(xiàn)

    在編程,將字符串轉(zhuǎn)換為數(shù)字是一個常見的需求。不同的編程語言有不同的方法來實(shí)現(xiàn)這一功能。以下是一些常見編程語言中的字符串轉(zhuǎn)數(shù)字的實(shí)現(xiàn)方法:
    的頭像 發(fā)表于 01-07 15:26 ?936次閱讀

    字符串處理:4G模組軟件指南精要!

    最近一直有朋友咨詢我關(guān)于4G模組的字符串處理,今天我便把相關(guān)指南展示給大家。
    的頭像 發(fā)表于 11-17 09:57 ?530次閱讀
    <b class='flag-5'>字符串</b>處理:4G模組軟件指南精要!

    base64字符串轉(zhuǎn)換為二進(jìn)制文件

    Base64是一種編碼方法,用于將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII字符串。這種編碼通常用于在不支持二進(jìn)制數(shù)據(jù)的系統(tǒng)傳輸數(shù)據(jù),例如電子郵件或網(wǎng)頁。將Base64字符串轉(zhuǎn)換為二進(jìn)制文件的過程相對簡單,但需要
    的頭像 發(fā)表于 11-10 10:55 ?2841次閱讀

    MATLAB(5)--字符串處理

    字符串表示 在MATLAB,字符串是用單引號括起來的字符序列,是把一個字符串當(dāng)做一個行向量,這個行向量
    發(fā)表于 09-06 10:22

    labview字符串數(shù)組轉(zhuǎn)化為數(shù)值數(shù)組

    在LabVIEW,將字符串數(shù)組轉(zhuǎn)換為數(shù)值數(shù)組是一項常見的任務(wù),尤其是在處理數(shù)據(jù)采集、信號處理或用戶輸入時。 1. 理解LabVIEW的數(shù)據(jù)類型 在開始之前,了解LabVIEW的數(shù)據(jù)類型是非
    的頭像 發(fā)表于 09-04 17:47 ?5686次閱讀

    labview字符串如何轉(zhuǎn)換為16進(jìn)制字符串

    在LabVIEW,將字符串轉(zhuǎn)換為16進(jìn)制字符串是一個常見的需求,尤其是在處理數(shù)據(jù)通信和硬件接口時。LabVIEW提供了多種方法來實(shí)現(xiàn)這一轉(zhuǎn)換,包括使用內(nèi)置函數(shù)、編寫VI(Virtua
    的頭像 發(fā)表于 09-04 15:54 ?5338次閱讀

    labview如何實(shí)現(xiàn)字符串換行

    1. 字符串換行的基本概念 在LabVIEW字符串換行通常指的是在字符串插入換行符,使得字符串
    的頭像 發(fā)表于 09-04 15:47 ?3919次閱讀

    labview如何實(shí)現(xiàn)字符串選擇輸出

    在LabVIEW實(shí)現(xiàn)字符串選擇輸出是一項常見的任務(wù),它涉及到字符串處理、條件判斷和用戶界面設(shè)計等多個方面。由于LabVIEW是一種圖形化編程語言,其編程方式與傳統(tǒng)的文本編程語言有所不
    的頭像 發(fā)表于 09-04 15:44 ?2211次閱讀

    labview中常用的字符串函數(shù)有哪些?

    在LabVIEW,常用的字符串函數(shù)廣泛覆蓋了對字符串的各種操作,包括但不限于格式化、搜索、替換、連接、計算長度等。以下是一些常用的字符串函數(shù)及其簡要說明:
    的頭像 發(fā)表于 09-04 15:43 ?1851次閱讀

    labview字符串的四種表示各有什么特點(diǎn)

    。在LabVIEW字符串是一種基本的數(shù)據(jù)類型,用于表示文本信息。字符串在LabVIEW中有多種表示方式,每種方式都有其特定的應(yīng)用場景和特點(diǎn)。以下是對LabVIEW四種
    的頭像 發(fā)表于 09-04 15:40 ?1426次閱讀