衡阳派盒市场营销有限公司

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

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

3天內不再提示

硬件簡單的日志打印方法

科技綠洲 ? 來源:zsky ? 作者:zsky ? 2023-06-22 10:08 ? 次閱讀

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

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

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

目的:

1)方便查找打印日志

2)日志格式規范

3)可以查看用戶添加信息,文件信息,函數接口,以及文件所在行號

4)支持format格式

5)可以支持實時時間

基本知識:

C語言中的__FILE__、LINE__和__FUNCTION

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

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

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

注:

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

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

源碼

#define DEBUG_EN (1u)
 
#if (DEBUG_EN)
 
#define DEBUG_MAX_SIZE 512
extern char szBuf[DEBUG_MAX_SIZE];
 
#define DEBUG_INFO( format, ... ) do{\\
    u16 unLen = 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)
 
#define DEBUG_WARN( format, ... ) do{\\
    u16 unLen = 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)
 
#define DEBUG_ERR( format, ... ) do{\\
    u16 unLen = 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 
 
#define DEBUG_INFO(...)
#define DEBUG_WARN(...)
#define DEBUG_ERR(...)
 
#endif

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

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

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

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

實現效果

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

圖片

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

    關注

    11

    文章

    3381

    瀏覽量

    66451
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    240

    瀏覽量

    26731
  • 日志
    +關注

    關注

    0

    文章

    139

    瀏覽量

    10679
收藏 人收藏

    評論

    相關推薦

    Labview實現txt文本文件打印簡單方法

    新手學NI,為現場做了一個自動記錄到txt的小程序,但要求記錄到一定量時打印該txt文件,網上只有打印VI和打印EXCEL的一些教程,打電話需求NI官方的幫助,得到的解決方法是轉化為W
    發表于 03-19 13:11

    Python日志打印重復解決方法

    Python日志打印重復問題
    發表于 06-12 07:18

    簡單記錄下最近設計的一種日志打印方法

    仿真,這樣大多數方法便是加打印信息進行找問題。打印的接口有很多種,比如串口,網絡,顯示等等。簡單硬件開發串口估計是最常用的。這里
    發表于 01-11 06:09

    STM32的常規打印方法

    常規打印方法 在STM32的應用中,我們常常對printf進行重定向的方式來把打印信息printf到我們的串口助手。在...
    發表于 02-21 06:51

    講講調試程序的重要方法打印日志

    今天來講講調試程序的重要方法打印日志。無論開發何種程序,單片機,手機APP,電腦客戶端,還是服務器,日志都是最基礎也是最重要的調試手段。手機APP,電腦客戶端和服務器的開發環境往往提
    發表于 06-20 17:14

    數碼印像機打印方

    數碼印像機打印方式              打印方式實際上就是指數碼印像機是采用何種打印技術進行
    發表于 12-23 14:33 ?849次閱讀

    條碼打印機的打印方

    條碼打印機的打印方式         
    發表于 12-30 11:44 ?1473次閱讀

    票據打印機的打印方

    票據打印機的打印方式              票據打印機是根據打印機的主要用途劃分
    發表于 12-30 13:37 ?1192次閱讀

    票據打印機的打印方

    票據打印機的打印方向              打印方向指的是票據打印機在
    發表于 12-30 13:55 ?1025次閱讀

    考勤/收費機的打印方

    考勤/收費機的打印方式              就是通常我們所說的根據打印的原理來劃分出來的針式打印、噴墨
    發表于 12-30 15:19 ?747次閱讀

    視頻打印機的打印方

    視頻打印機的打印方式              打印方式指的是產品采用的是哪種打印
    發表于 12-31 10:21 ?1274次閱讀

    基于熱敏打印機的心電圖形快速打印方法的研究及應用實例

    基于熱敏打印機的心電圖形快速打印方法的研究及應用實例  目前,我國各醫院普遍使用的心電圖機絕大多數是機電式的,即通過電極檢測心電信號,放大后直接記錄
    發表于 02-04 09:57 ?1236次閱讀
    基于熱敏<b class='flag-5'>打印</b>機的心電圖形快速<b class='flag-5'>打印方法</b>的研究及應用實例

    熱敏打印機的心電圖形快速打印方法

    12導同步心電圖機為例,介紹以普通52單片機為主控芯片應用串行熱敏打印機實現多種方式的心電圖形打印,并重點描述了12導聯同步打印方式的程序實現方案。
    發表于 12-05 10:03 ?6171次閱讀
    熱敏<b class='flag-5'>打印</b>機的心電圖形快速<b class='flag-5'>打印方法</b>

    關于一種高效printf打印方

    一種高效printf打印方
    的頭像 發表于 02-29 16:29 ?3497次閱讀
    關于一種高效printf<b class='flag-5'>打印方</b>式

    選擇 3D 醫療打印方法

    選擇 3D 醫療打印方法
    的頭像 發表于 12-29 10:02 ?910次閱讀
    至尊百家乐2014| 网页百家乐官网的玩法技巧和规则 | 视频百家乐官网平台出租| 百家乐官网视频麻将游戏| 如何玩百家乐官网赚钱| 百家乐破解辅助| 百家乐桌手机套| 全讯网新闻| 皇冠最新投注网| 澳门百家乐官网娱乐城注册| 蓝盾百家乐官网娱乐场开户注册| 免费百家乐规则| 财富百家乐的玩法技巧和规则 | 鼎丰娱乐城开户| 至尊百家乐官网qvod| 百家乐官网视| 百家乐机器出千| 全讯网六| 百家乐官网获胜秘决| 百家乐官网资深 | 怎样玩百家乐官网才能| 噢门百家乐注码技巧| 大发888开户即送58| 东阳市| 百家乐官网998| 百家乐优博u2bet| bet365娱乐场下载| 至尊百家乐官网网| 百家乐单人操作扫描道具| 百家乐官网和的打法| 百家乐官网和21点| 百家乐哪条路准| 利来娱乐网| 澳门玩百家乐官网的玩法技巧和规则 | 现场百家乐玩法| 百家乐翻天| 在线百家乐官网下| 二八杠算法| 百家乐官网电话投注多少| E世博百家乐娱乐城| 噶尔县|