那曲檬骨新材料有限公司

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

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

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

嵌入式軟件調(diào)試中的打印開(kāi)關(guān)及打印等級(jí)

CHANBAEK ? 來(lái)源:嵌入式學(xué)習(xí)之路 ? 作者: 創(chuàng)客小巴 ? 2023-05-14 16:38 ? 次閱讀

今天來(lái)分享下項(xiàng)目中經(jīng)常使用到的打印,應(yīng)該是每個(gè)嵌入式軟件工程師在日常調(diào)試項(xiàng)目中都需要的必備技能(并不是什么很難或者不常見(jiàn)的方法,其實(shí)是今天公眾號(hào)沒(méi)啥寫的,就來(lái)簡(jiǎn)單的分享一下,也一定有人能受益)之前有關(guān)打印也在公眾號(hào)中發(fā)過(guò)一篇文章,關(guān)于彩色打印的,有需要的小伙伴可以看下小編寫的這篇文章的介紹。

看過(guò)文章的都知道Easylogger的方便之處是在控制臺(tái)中斷打印出彩色的打印信息,并且能在軟件上設(shè)置打印的顏色、閃爍等效果,但是其在移植的時(shí)候勢(shì)必會(huì)占用一些內(nèi)存空間,其帶來(lái)的好處也是不言而喻的,我現(xiàn)在在項(xiàng)目中也會(huì)使用Easylogger,能夠一眼在多如牛毛的打印信息中看到紅色的錯(cuò)誤信息,有利于定位錯(cuò)誤代碼。

今天要說(shuō)的就是怎么在占用更小的內(nèi)存空間,控制打印信息的輸出,實(shí)現(xiàn)打印的開(kāi)關(guān)控制以及過(guò)濾打印等級(jí)較低的打印信息輸出。 雖然不能實(shí)現(xiàn)不同顏色的打印,但帶來(lái)的好處是在片內(nèi)空間比較緊張的情況下,簡(jiǎn)單的實(shí)現(xiàn)過(guò)濾打印信息的效果,兩種方法根據(jù)自己的硬件環(huán)境做評(píng)估。

打印開(kāi)關(guān)

我們?cè)陧?xiàng)目中調(diào)試的代碼都有Debug版本和Release版本,Debug版本用于輸出一些log方便日常調(diào)試以及bug定位,但是打印信息影響整個(gè)系統(tǒng)的性能,因此在發(fā)布Release版本的時(shí)候一般都會(huì)要求把log信息關(guān)閉,如果要一行一行的去注釋所有的打印信息,項(xiàng)目代碼比較龐大的時(shí)候,似乎這個(gè)操作會(huì)累S個(gè)人,怎么才能實(shí)現(xiàn)更簡(jiǎn)單的控制呢?

方法還是有的,使用一個(gè)宏定義,如下:

#define  __DEBUG


#ifdef  __DEBUG
#define  DEBUG(msg)  printf(msg)
#else
#define  DEBUG(msg)
#endif

當(dāng)定義宏__DEBUGDE時(shí)候就能打開(kāi)打印信息,屏蔽__DEBUG宏定義的時(shí)候就能關(guān)閉打印信息輸出,這樣操作后就變得很簡(jiǎn)單了。

是上面的代碼有個(gè)問(wèn)題,不知道細(xì)心的小伙伴能不能發(fā)現(xiàn)。問(wèn)題在于這個(gè)DEBUG宏如果用來(lái)打印可變參數(shù)似乎編譯不過(guò)去,會(huì)有錯(cuò)誤產(chǎn)生,例如下面的代碼:

DEBUG("Hello %s\\n", "linux");  /* 此代碼結(jié)合上面的打印無(wú)法編譯通過(guò) */

因此還需要對(duì)其進(jìn)行改造。 改造后如下:

#define  __DEBUG


#ifdef  __DEBUG
#define  DEBUG(msg, ...)  printf(msg, ##__VA_ARGS__)
#else
#define  DEBUG(msg, ...)
#endif

這里可以很好的解決上述問(wèn)題,支持可變參數(shù)打印,__VA_ARGS__這個(gè)宏會(huì)獲取可變參數(shù)的個(gè)數(shù)

這里有一個(gè)要注意的是,在C99的標(biāo)準(zhǔn)下,上述代碼還可以優(yōu)化一下,變得稍微簡(jiǎn)單點(diǎn),如下:

#define  __DEBUG


#ifdef  __DEBUG
#define  DEBUG(...)  printf(__VA_ARGS__)
#else
#define  DEBUG(...)
#endif

對(duì)比兩個(gè)代碼段,發(fā)現(xiàn)DEBUG少了參數(shù)msg,實(shí)現(xiàn)的效果也是一樣的,注意的是C99標(biāo)準(zhǔn)哦!

打印等級(jí)

打印開(kāi)關(guān)了,接著來(lái)看下打印等級(jí)吧。

分等級(jí)的打印能打印出等級(jí)較高的內(nèi)容,過(guò)濾一些無(wú)關(guān)的打印。 這是其優(yōu)點(diǎn)。

我在示例代碼中分了三個(gè)打印等級(jí),并定義了PRINT_LEVEL,只有打印等級(jí)大于PRINT_LEVEL的才會(huì)被打印出來(lái),那就直接看代碼。(寫法千千萬(wàn),按照自己喜歡的風(fēng)格去實(shí)現(xiàn)這個(gè)功能就好,這里只是一種思路)

#if#include 


#define  __DEBUG                    /* 打印開(kāi)關(guān)控制 */


#ifdef   __DEBUG
#define  DEBUG(...)   printf(__VA_ARGS__)
#else
#define  DEBUG(...)
#endif


/* 數(shù)值越大,等級(jí)越高 */
#define  INFO_LEVEL    1            /* 打印等級(jí)最低 */
#define  WARN_LEVEL    2            /* 打印等級(jí)2 */
#define  ERROR_LEVEL   3            /* 打印等級(jí)3 */
#define  DEBUG_NULL    255          /* printf off */


#define  PRINT_LEVEL   WARN_LEVEL   /* 打印等級(jí)大于或等于WARN_LEVEL的會(huì)被打印出來(lái) */


#define  DEBUG_INFO(...)   do{                                   \\
                                if(INFO_LEVEL >= PRINT_LEVEL)    \\
                                    DEBUG(__VA_ARGS__);          \\
                              }while(0)


#define  DEBUG_WARN(...)   do{                                   \\
                                if(WARN_LEVEL >= PRINT_LEVEL)    \\
                                    DEBUG(__VA_ARGS__);          \\
                              }while(0)


#define  DEBUG_ERR(...)   do{                                    \\
                                if(ERROR_LEVEL >= PRINT_LEVEL)   \\
                                    DEBUG(__VA_ARGS__);          \\
                            }while(0)


int main(void)
{
    DEBUG_INFO("Debug_Info msg.\\r\\n");
    DEBUG_WARN("Debug_Warning msg.\\r\\n");
    DEBUG_ERR("Debug_Error msg.\\r\\n");
    return 0;
}

上面的代碼運(yùn)行結(jié)果是:

Debug_Warning msg.


Debug_Error msg.

可以看出過(guò)濾掉了Info的打印信息,當(dāng)我們只需要看錯(cuò)誤信息的時(shí)候,就可以修改打印等級(jí)去實(shí)現(xiàn),這樣能更好的查看各種打印信息。

好了,到此就結(jié)束了,今天的分享還是很簡(jiǎn)單易懂的,哪怕是在51平臺(tái)上也能簡(jiǎn)單實(shí)現(xiàn)打印的過(guò)濾(常用的89C51 89C52上再去移植Easylogger跑起來(lái)彩色打印,應(yīng)該是有點(diǎn)困難的,內(nèi)部資源不夠,因此,簡(jiǎn)單的實(shí)現(xiàn)log過(guò)濾就要依賴今天分享的這種方式啦)

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

    關(guān)注

    19

    文章

    3144

    瀏覽量

    93917
  • 嵌入式
    +關(guān)注

    關(guān)注

    5094

    文章

    19178

    瀏覽量

    307732
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5013

    瀏覽量

    88085
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    589

    瀏覽量

    34065
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    94

    瀏覽量

    19976
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式開(kāi)發(fā)習(xí)慣和嵌入式gdb調(diào)試步驟

    嵌入式linux開(kāi)發(fā)過(guò)程,出現(xiàn)BUG是在所難免的,這時(shí)就需要用到調(diào)試技術(shù)了,最常用、最簡(jiǎn)單的調(diào)試方法當(dāng)屬printf打印了。 如果ubu
    發(fā)表于 12-17 23:39

    嵌入式系統(tǒng)軟件開(kāi)發(fā)環(huán)境調(diào)試器的設(shè)計(jì)

    調(diào)試軟件開(kāi)發(fā)流程是一個(gè)比較重要的環(huán)節(jié),調(diào)試器是衡量一個(gè)軟件開(kāi)發(fā)環(huán)境優(yōu)劣的重要因素.本文對(duì)嵌入式
    發(fā)表于 05-30 13:51 ?29次下載

    嵌入式系統(tǒng)Internet打印的設(shè)計(jì)與實(shí)現(xiàn)

    本文通過(guò)設(shè)計(jì)實(shí)例介紹了一種嵌入式網(wǎng)絡(luò)打印的實(shí)現(xiàn)方案。該方案選用ATmega128 為MPU、LAN91C111 為網(wǎng)絡(luò)控制器,以通用的SPP 打印并口作為物理輸出端 口,硬件構(gòu)成上具有典型意義。軟
    發(fā)表于 06-23 13:40 ?20次下載

    基于嵌入式Linux的B超圖像打印的實(shí)現(xiàn)

    本文實(shí)現(xiàn)了一種基于嵌入式Linux 的B 超圖像打印方案,可以在多種常用噴墨打印機(jī)上輸出256 灰度級(jí)的超聲圖像硬拷貝。通過(guò)對(duì)個(gè)人計(jì)算機(jī)Linux 下的打印系統(tǒng)的分析,提出了符合
    發(fā)表于 08-22 11:24 ?16次下載

    基于嵌入式Linux的打印控制系統(tǒng)的設(shè)計(jì)

    本文介紹了一種基于嵌入式Linux 的打印控制系統(tǒng),并給出了軟、硬件的整體設(shè)計(jì)方案。這一方案應(yīng)用先進(jìn)的ARM 嵌入式技術(shù),使當(dāng)前必須由計(jì)算機(jī)來(lái)驅(qū)動(dòng)的打印機(jī),完全脫離了計(jì)算
    發(fā)表于 08-28 09:36 ?22次下載

    基于開(kāi)源軟件嵌入式網(wǎng)絡(luò)打印服務(wù)器

    基于開(kāi)源軟件嵌入式網(wǎng)絡(luò)打印服務(wù)器   引 言   目前常用的打印機(jī)有兩種接口形式:USB口和Eth-ernet網(wǎng)口。由于價(jià)格相對(duì)較低,USB口的
    發(fā)表于 11-27 09:57 ?2152次閱讀
    基于開(kāi)源<b class='flag-5'>軟件</b>的<b class='flag-5'>嵌入式</b>網(wǎng)絡(luò)<b class='flag-5'>打印</b>服務(wù)器

    嵌入式應(yīng)用的能耗調(diào)試技術(shù)

    嵌入式應(yīng)用的能耗調(diào)試技術(shù)
    發(fā)表于 02-12 17:28 ?936次閱讀
    <b class='flag-5'>嵌入式</b>應(yīng)用<b class='flag-5'>中</b>的能耗<b class='flag-5'>調(diào)試</b>技術(shù)

    嵌入式軟件打印調(diào)試信息的方法

    在我們的嵌入式開(kāi)發(fā),常常把printf重定向到MCU的串口外設(shè),再配合上位機(jī)界面軟件,通過(guò)打印調(diào)試信息的方式來(lái)
    的頭像 發(fā)表于 04-04 17:35 ?3329次閱讀

    嵌入式軟件的開(kāi)發(fā)流程_嵌入式軟件調(diào)試

    本文首先介紹了嵌入式軟件的發(fā)展,其次闡述了嵌入式軟件的開(kāi)發(fā)流程,最后介紹了嵌入式軟件
    發(fā)表于 08-31 16:02 ?6354次閱讀

    嵌入式arm usb打印機(jī)完整教程

    嵌入式arm usb打印機(jī)完整教程(嵌入式開(kāi)發(fā)實(shí)習(xí)手冊(cè))-該文檔為嵌入式arm usb打印機(jī)完整教程文檔,是一份很不錯(cuò)的參考資料,具有較高參
    發(fā)表于 08-04 09:54 ?32次下載
    <b class='flag-5'>嵌入式</b>arm usb<b class='flag-5'>打印</b>機(jī)完整教程

    嵌入式開(kāi)發(fā)實(shí)用的宏打印函數(shù)

    打印函數(shù)在我們的嵌入式開(kāi)發(fā),使用printf打印一些信息是一種常用的調(diào)試手段。但是,在打印
    的頭像 發(fā)表于 09-16 10:05 ?1684次閱讀
    <b class='flag-5'>嵌入式</b>開(kāi)發(fā)<b class='flag-5'>中</b>實(shí)用的宏<b class='flag-5'>打印</b>函數(shù)

    嵌入式開(kāi)發(fā)putty串口打印亂碼

    目錄嵌入式開(kāi)發(fā)putty串口打印亂碼編碼格式問(wèn)題波特率設(shè)置錯(cuò)誤嵌入式開(kāi)發(fā)putty串口打印亂碼在使用putty連接串口打印的時(shí)候,發(fā)現(xiàn)
    發(fā)表于 11-02 18:21 ?12次下載
    <b class='flag-5'>嵌入式</b>開(kāi)發(fā)putty串口<b class='flag-5'>打印</b>亂碼

    單片機(jī)沒(méi)有串口時(shí)如何打印調(diào)試信息

    輸出調(diào)試信息是嵌入式開(kāi)發(fā)必不可少的調(diào)試利器,嵌入式開(kāi)發(fā)的一個(gè)特點(diǎn)是很多時(shí)候沒(méi)有操作系統(tǒng),或者沒(méi)有文件系統(tǒng),常規(guī)的
    的頭像 發(fā)表于 03-10 17:19 ?2629次閱讀
    單片機(jī)沒(méi)有串口時(shí)如何<b class='flag-5'>打印</b><b class='flag-5'>調(diào)試</b>信息

    如何選擇(集成)嵌入式熱敏打印機(jī)

    各種自助終端機(jī)在集成嵌入式熱敏打印機(jī)時(shí)候應(yīng)該考慮和關(guān)注哪些因素和技術(shù)點(diǎn)
    的頭像 發(fā)表于 08-02 11:07 ?1876次閱讀
    如何選擇(集成)<b class='flag-5'>嵌入式</b>熱敏<b class='flag-5'>打印</b>機(jī)

    (集成)嵌入式熱敏打印機(jī)的選擇

    各種自助終端機(jī)在集成嵌入式熱敏打印機(jī)時(shí)候應(yīng)該考慮哪些因素,關(guān)注哪些技術(shù)點(diǎn)?選擇比較適合的嵌入式熱敏打印機(jī)。
    發(fā)表于 08-09 15:53 ?3次下載
    大连百家乐商场| 澳门百家乐长赢打| 百家乐官网建材| 百家乐官网大老娱乐| 大发888娱乐城客户端lm0| 百家乐牌机的破解法| 电脑百家乐官网玩| 百家乐官网小77论坛| 亚洲顶级赌场手机版| 网络百家乐破解平台| 新思维百家乐官网投注法| 深水埗区| 大发888娱乐场下载 17| 百家乐大西洋| 百家乐官网baccarat| 百家乐官网大小技巧| 即墨市| 博彩网站评级| 赌球记| 布加迪百家乐的玩法技巧和规则 | 百家乐官网隐者博客| 新利国际娱乐网| 大发888的任务怎么做| 百家乐谁能看准牌| 百家乐去哪里玩最好| 钱柜百家乐官网娱乐城| 百家乐官网赌场代理| 百家乐官网在线投注系统| 大足县| 菲律宾沙龙国际| 顶级赌场官方下载| 裕昌太阳城业主论坛| 百家乐新送彩金| 百家乐有好的投注法吗| 肯博百家乐游戏| A8百家乐官网的玩法技巧和规则 | 视频百家乐官网信誉| 百家乐官网是不是有假| 道孚县| e乐博官网| 新云顶国际|