在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

串口日志輸出DEBUG文件編寫

技術讓夢想更偉大 ? 來源:CSDN-沉默的小宇宙 ? 2023-09-21 09:21 ? 次閱讀


相信大多數嵌入式開發者都會碰到對程序進行調試或者查找BUG的情況,常見的兩種方法都是仿真和通過日志進行的。

有條件仿真的是更好,單是在編寫嵌入式軟件程序過程中,并不是所有的硬件都支持仿真或者方便仿真,這樣大多數方法便是加打印信息進行找問題。

打印的接口有很多種,比如串口,網絡,顯示等等。簡單的硬件開發串口估計是最常用的。這里簡單記錄下一種日志打印方法。

目的:

1)方便查找打印日志 2)日志格式規范 3)可以查看用戶添加信息,文件信息,函數接口,以及文件所在行號 4)支持format格式 5)可以支持實時時間

基本知識:

C語言中的__FILE__、LINE__和__FUNCTION

1、FILE用于指示本行代碼所在源文件的文件名;

2、__LINE__用于指示本行代碼所在源文件中的位置(行數);

3、__FUNCTION__用于指示本行代碼所在函數(函數名);

注:

1)"FILE"、"LINE"、"FUNCTION"等均大小寫敏感

2)支持需要添加頭文件#include

源碼

#defineDEBUG_EN(1u)

#if(DEBUG_EN)

#defineDEBUG_MAX_SIZE512
externcharszBuf[DEBUG_MAX_SIZE];

#defineDEBUG_INFO(format,...)do{
u16unLen=0;
unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[INFO][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);
unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);
usart1_send_buf_with_txe((u8*)szBuf,unLen);
}while(0)

#defineDEBUG_WARN(format,...)do{
u16unLen=0;
unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[WARN][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);
unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);
usart1_send_buf_with_txe((u8*)szBuf,unLen);
}while(0)

#defineDEBUG_ERR(format,...)do{
u16unLen=0;
unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[ERR][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);
unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);
usart1_send_buf_with_txe((u8*)szBuf,unLen);
}while(0)

#elif

#defineDEBUG_INFO(...)
#defineDEBUG_WARN(...)
#defineDEBUG_ERR(...)

#endif

源碼主要使用宏定義的方式,為了支持文件、行號,函數等等,不能使用單獨的函數進行定義。具體原因可以思考下,不過多贅述。

C文件目前只有一個數組定義char szBuf[DEBUG_MAX_SIZE];。

為了兼容,INFO,WARN和ERR三個共用一個buf,聲明全局變量更主要的一個原因是使用了串口的中斷發送函數usart1_send_buf_with_txe,而不是循環發送完成再退出,這里傳輸是進行指針傳遞的,發送使用中斷的好處就是高效率,不耽誤其他程序跑。

當然移植的時候完全可以根據自己的接口和實現方式進行更換。

實現效果

[INFO][..sourcemain.c][@main][#36]:testStr[111],testInt[111],testHex[0x000015BC]
[WARN][..sourcemain.c][@main][#37]:testStr[111],testInt[111],testHex[0x000015BC]
[ERR][..sourcemain.c][@main][#38]:testStr[111],testInt[111],testHex[0x000015BC]

fcc57a04-5812-11ee-939d-92fbcf53809c.png

審核編輯:湯梓紅

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

    關注

    5125

    文章

    19438

    瀏覽量

    313184
  • C語言
    +關注

    關注

    180

    文章

    7628

    瀏覽量

    139751
  • 串口
    +關注

    關注

    14

    文章

    1580

    瀏覽量

    78358
  • 程序
    +關注

    關注

    117

    文章

    3817

    瀏覽量

    82179
  • 日志
    +關注

    關注

    0

    文章

    140

    瀏覽量

    10785

原文標題:好用的嵌入式設備日志輸出模塊 log.h

文章出處:【微信號:技術讓夢想更偉大,微信公眾號:技術讓夢想更偉大】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    InDTU300系列產品如何輸出實時日志

    “保存配置”,提示是否重啟時,選擇不重啟。點擊維護~實時日志。 點擊開始接收,稍等幾秒會看到模塊輸出的實時日志,故障復現后,依次點擊停止接收~導出日志,將
    發表于 07-25 06:05

    多任務環境下串口輸出debug信息的方法是什么?

    樓主的程序是基于freeRTOS的,劃分成了幾個任務。為了方便調試,在一些地方增加了一些從串口輸出debug信息的代碼,同時為了方便在編譯時去掉這些代碼,我是用宏定義的方法在頭文件里面
    發表于 07-20 08:03

    串口彩色波形顯示日志助手 云控日志CloudLog.exe

    FwbConf.h中的配置信息。 5、使用之中有問題或建議可以提Issues或加QQ群857283039。 參考PlatformWindows目錄下的main.c文件,您可以了解如何輸出不同類型的日志
    發表于 09-06 16:51

    如何編寫dll文件

    如何編寫dll文件:可以用幾種語言來實現,如delphi編寫dll,pb編寫dll文件,java 編寫
    發表于 01-16 10:20 ?8967次閱讀

    Linux日志文件系統解析

    在近代歷史上,日志文件系統被認為十分奇特,主要是處于研究階段。而如今,日志文件系統(ext3)已經成為 Linux的缺省文件系統。本文向大家
    發表于 11-01 15:23 ?0次下載
    Linux<b class='flag-5'>日志</b><b class='flag-5'>文件</b>系統解析

    Oracle核心技術之控制文件日志文件

    控制文件日志文件是Oracle數據庫中儲存信息的重要文件。控制文件用來存放數據庫的名字、數據文件
    發表于 03-26 11:03 ?2次下載

    Linux系統日志文件中的JFS文件系統

    嵌入式linux中文站向大家介紹一下JFS文件系統。Linux系統日志文件中的JFS系統, JFS 由IBM 公司開發,最初出現在AIX 操作系統之上,它提供了基于日志的字節級、面向事
    發表于 05-05 14:10 ?5212次閱讀
    Linux系統<b class='flag-5'>日志</b><b class='flag-5'>文件</b>中的JFS<b class='flag-5'>文件</b>系統

    單片機對日志系統的設計

    為單片機設計了一套簡單的日志系統,通過日志系統提供的接口可以查看設備狀態,并進行一些基本的調試。 日志系統通過串口輸出,所以單片機需要
    發表于 04-02 14:26 ?5508次閱讀
    單片機對<b class='flag-5'>日志</b>系統的設計

    文件系統中的日志系統是如何實現的

    日志 本文來聊聊文件系統中的日志系統,來看一個簡單的日志系統是如何實現的。本文是接著前面的 xv6 系列,用到的一些前導知識不再說明,沒看的可以先看一下。
    的頭像 發表于 09-29 11:04 ?2398次閱讀
    <b class='flag-5'>文件</b>系統中的<b class='flag-5'>日志</b>系統是如何實現的

    嵌入式log打印格式輸出技巧

    :[info] main.c : init ok!例:[debug] adc.c : adc_getvalue -> 3.3v參考 Java 日志框架的輸出方式:[ 文件名]
    發表于 10-20 21:06 ?5次下載
    嵌入式log打印格式<b class='flag-5'>輸出</b>技巧

    Python寫入到日志文件完整代碼

    寫入到日志文件 上面我們說的是將日志打印到控制臺中,但是我們Python代碼寫完并且在運行當中后,我們就不可能這樣玩了,所以我們需要將日志保存到一個
    的頭像 發表于 10-07 11:50 ?1477次閱讀
    Python寫入到<b class='flag-5'>日志</b><b class='flag-5'>文件</b>完整代碼

    Loguru日志記錄器的安裝方式

    這個強大工具的基本使用方法。 Loguru 安裝方式很簡單,打開終端輸入: pip install loguru 即可完成安裝。 1.即開即用 如果你需要輸出 debug 日志到終端,可以這么做
    的頭像 發表于 10-16 11:35 ?893次閱讀
    Loguru<b class='flag-5'>日志</b>記錄器的安裝方式

    Loguru:一個能徹底解放你的日志記錄器

    這個強大工具的基本使用方法。 Loguru 安裝方式很簡單,打開終端輸入: pip install loguru 即可完成安裝。 1.即開即用 在Loguru中,如果你需要輸出 debug 日志到終端
    的頭像 發表于 10-30 15:01 ?1560次閱讀
    Loguru:一個能徹底解放你的<b class='flag-5'>日志</b>記錄器

    Loguru :徹底解放你的日志記錄器

    這個強大工具的基本使用方法。 Loguru 安裝方式很簡單,打開終端輸入: pip install loguru 即可完成安裝。 1.即開即用 如果你需要輸出 debug 日志到終端,可以這么做
    的頭像 發表于 11-01 11:01 ?1347次閱讀
    Loguru :徹底解放你的<b class='flag-5'>日志</b>記錄器

    logcat命令抓取日志方法

    -b main:抓取main緩沖區的日志; -b system:抓取system緩沖區的日志; -b crash:抓取crash緩沖區的日志; -r:每次輸出多大
    的頭像 發表于 11-23 17:31 ?1843次閱讀
    logcat命令抓取<b class='flag-5'>日志</b>方法
    主站蜘蛛池模板: 天堂网www中文天堂在线 | 久久99精品一级毛片 | 三级网站国产 | 亚洲成在人天堂一区二区 | 欧美性区 | 狠狠色噜噜狠狠狠97影音先锋 | 亚洲va中文字幕无码 | 怡红院色视频在线 | 成人久久网站 | 国产精品一区二区三区四区 | 亚洲综合久久久 | 午夜一级精品免费毛片 | 国产成人啪午夜精品网站男同 | 四虎在线观看一区二区 | 天天操视频 夜夜 | 日韩中文字幕第一页 | 色婷婷狠狠久久综合五月 | 美女丝袜长腿喷水gif动态图 | 日本在线视频精品 | 日本日b视频 | 一本一本大道香蕉久在线精品 | 亚洲三级网 | 色偷偷综合 | 免费超爽视频 | 欧美黑人黄色片 | 欧美视频免费一区二区三区 | 乱子伦xxx欧美| 黄a视频| 性色网站 | 国产欧美亚洲精品第二区首页 | 免费一级特黄特色大片在线观看看 | 五月婷婷在线观看视频 | 久优草 | 日本高清视频色视频kk266 | 日日夜夜2017 | 18满xo影院视频免费体验区 | 午夜私人影院 | se94se欧美 | 在线aa | 激情五月开心婷婷 | 欧美性喷潮 |