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

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

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

3天內不再提示

嵌入式軟件調試中的打印開關及打印等級

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

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

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

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

打印開關

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

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

#define  __DEBUG


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

當定義宏__DEBUGDE時候就能打開打印信息,屏蔽__DEBUG宏定義的時候就能關閉打印信息輸出,這樣操作后就變得很簡單了。

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

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

因此還需要對其進行改造。 改造后如下:

#define  __DEBUG


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

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

這里有一個要注意的是,在C99的標準下,上述代碼還可以優(yōu)化一下,變得稍微簡單點,如下:

#define  __DEBUG


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

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

打印等級

打印開關了,接著來看下打印等級吧。

分等級的打印能打印出等級較高的內容,過濾一些無關的打印。 這是其優(yōu)點。

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

#if#include 


#define  __DEBUG                    /* 打印開關控制 */


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


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


#define  PRINT_LEVEL   WARN_LEVEL   /* 打印等級大于或等于WARN_LEVEL的會被打印出來 */


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

上面的代碼運行結果是:

Debug_Warning msg.


Debug_Error msg.

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

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

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

    關注

    19

    文章

    3136

    瀏覽量

    93600
  • 嵌入式
    +關注

    關注

    5082

    文章

    19106

    瀏覽量

    304829
  • 軟件
    +關注

    關注

    69

    文章

    4923

    瀏覽量

    87403
  • 調試
    +關注

    關注

    7

    文章

    578

    瀏覽量

    33924
  • DEBUG
    +關注

    關注

    3

    文章

    93

    瀏覽量

    19907
收藏 人收藏

    評論

    相關推薦

    嵌入式開發(fā)習慣和嵌入式gdb調試步驟

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

    嵌入式系統(tǒng)軟件開發(fā)環(huán)境調試器的設計

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

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

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

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

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

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

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

    基于開源軟件嵌入式網(wǎng)絡打印服務器

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

    嵌入式應用的能耗調試技術

    嵌入式應用的能耗調試技術
    發(fā)表于 02-12 17:28 ?904次閱讀
    <b class='flag-5'>嵌入式</b>應用<b class='flag-5'>中</b>的能耗<b class='flag-5'>調試</b>技術

    嵌入式軟件打印調試信息的方法

    在我們的嵌入式開發(fā),常常把printf重定向到MCU的串口外設,再配合上位機界面軟件,通過打印調試信息的方式來
    的頭像 發(fā)表于 04-04 17:35 ?3268次閱讀

    嵌入式軟件的開發(fā)流程_嵌入式軟件調試

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

    嵌入式arm usb打印機完整教程

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

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

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

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

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

    單片機沒有串口時如何打印調試信息

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

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

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

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

    各種自助終端機在集成嵌入式熱敏打印機時候應該考慮哪些因素,關注哪些技術點?選擇比較適合的嵌入式熱敏打印機。
    發(fā)表于 08-09 15:53 ?3次下載
    主站蜘蛛池模板: 7777色鬼xxxx欧美色夫| 人C交ZZZ0OOZZZ000| 国产色婷婷亚洲99麻豆| jaPanesmature儿母| 2021扫黑风暴在线观看免费完整版| 亚洲欧美在无码片一区二区 | BLACKED太粗太长| 中文字幕亚洲无限码| 亚洲精品一区国产欧美| 香蕉精品国产高清自在自线| 三级黄视频| 天天爽夜夜爽| 特黄特黄aaaa级毛片免费看| 天天夜夜草草久久亚洲香蕉| 思思久99久女女精品| 少妇精油按摩| 午夜影院老司机| 亚洲高清国产拍精品影院| 亚洲AV香蕉一区区二区三区蜜桃 | 久久理论片| 久久精品中文字幕| 伦理片天堂eeuss影院2o12| 久久中文字幕亚洲精品最新| 麻豆国产精品久久人妻| 奶头好翘是不是想要了| 全黄h全肉短篇禁乱np| 手机在线播放成人亚洲影院电影| 婷婷四房播客五月天| 亚洲欧洲日产国码中学| 在线看片福利无码网址| 97国产蝌蚪视频在线观看| yellow视频免费观看高清在线| 大桥未久与黑人中出视频| 国产久青青青青在线观看| 护士一级片| 摸董事长的裤裆恋老小说| 欧美日韩一区在线观看| 天天爽夜夜爽| 伊人影院久久| 超碰免费视频公开观看| 国产亚洲tv在线观看|