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

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

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

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

C語(yǔ)言打印程序行號(hào)、日期方便調(diào)試程序

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-09-09 11:43 ? 次閱讀

【摘要】 平時(shí)開(kāi)發(fā)C語(yǔ)言程序時(shí),經(jīng)常需要調(diào)試代碼,C語(yǔ)言有一些宏,可以打印出當(dāng)前的行號(hào)、文件名稱、日期、時(shí)間,對(duì)程序的調(diào)試起到很大的幫助,可以快速定位問(wèn)題。特別是開(kāi)發(fā)單片機(jī)程序時(shí),使用這些宏打印這些信息或者在LCD上顯示程序的編譯日期、時(shí)間,可以知道這個(gè)單片機(jī)上的固件是什么時(shí)候編譯。幫助判斷版本。

一、前言

平時(shí)開(kāi)發(fā)C語(yǔ)言程序時(shí),經(jīng)常需要調(diào)試代碼,C語(yǔ)言有一些宏,可以打印出當(dāng)前的行號(hào)、文件名稱、日期、時(shí)間,對(duì)程序的調(diào)試起到很大的幫助,可以快速定位問(wèn)題。特別是開(kāi)發(fā)單片機(jī)程序時(shí),使用這些宏打印這些信息或者在LCD上顯示程序的編譯日期、時(shí)間,可以知道這個(gè)單片機(jī)上的固件是什么時(shí)候編譯。幫助判斷版本。

ANSIC標(biāo)準(zhǔn)定義了可供C語(yǔ)言使用的預(yù)定義宏:
__LINE__ : 在源代碼中插入當(dāng)前源代碼行號(hào)
__FILE__ : 在源代碼中插入當(dāng)前源代碼文件名
__DATE__ : 在源代碼中插入當(dāng)前編譯日期
__TIME__ : 在源代碼中插入當(dāng)前編譯時(shí)間

其中標(biāo)識(shí)符__LINE__和__FILE__一般用來(lái)調(diào)試程序,打印信息,方便定位錯(cuò)誤。

標(biāo)識(shí)符__DATE__和__TIME__一般可以用來(lái)表示固件的版本,方便了解運(yùn)行的程序是什么時(shí)候的版本。

標(biāo)識(shí)符__LINE__是一個(gè)整數(shù),其他的文件名稱、日期、時(shí)間都是字符串。

二、打印示例

printf("編譯日期與時(shí)間: %s,%s\n", __DATE__,__TIME__);
printf("當(dāng)前所在行號(hào):%d\r\n", __LINE__);
printf("當(dāng)前源文件名稱:%s\r\n", __FILE__);
printf("當(dāng)前固件編譯日期:%s\r\n", __DATE__);
printf("當(dāng)前固件編譯時(shí)間:%s\r\n", __TIME__);
image-20220507175252472

三、C語(yǔ)言封裝快捷Debug

#define DEBUG

#ifdef DEBUG
static int DebugPrintf(const char *format, ...)
{
	va_list arg_data;
	int     count;
	va_start(arg_data, format);                  /*  獲取可變參數(shù)列表  */
	fflush(stdout);                              /*  強(qiáng)制刷新輸出緩沖區(qū)  */
	count = vfprintf(stderr, format, arg_data);  /*  將信息輸出到標(biāo)準(zhǔn)出錯(cuò)流設(shè)備  */
	va_end(arg_data);                            /*  可變參數(shù)列表結(jié)束  */
	return count;
}
#else
static inline int DebugPrintf(const char *format, ...)
{

}
#endif

通過(guò)DEBUG這個(gè)宏來(lái)開(kāi)啟是否開(kāi)啟調(diào)試信息打印功能,如果程序穩(wěn)定后,不需要打印調(diào)試信息,就可以將DEBUG的定義取消掉即可。

完整代碼:

#include 
#include 
#include 
#include 
#include 
#include   
#include  

using namespace std;

//#define DEBUG

#ifdef DEBUG
static int DebugPrintf(const char *format, ...)
{
	va_list arg_data;
	int     count;
	va_start(arg_data, format);                  /*  獲取可變參數(shù)列表  */
	fflush(stdout);                              /*  強(qiáng)制刷新輸出緩沖區(qū)  */
	count = vfprintf(stderr, format, arg_data);  /*  將信息輸出到標(biāo)準(zhǔn)出錯(cuò)流設(shè)備  */
	va_end(arg_data);                            /*  可變參數(shù)列表結(jié)束  */
	return count;
}
#else
static inline int DebugPrintf(const char *format, ...)
{
	return 0;
}
#endif
int main()
{
	DebugPrintf("編譯日期與時(shí)間: %s,%s\n", __DATE__,__TIME__);
	DebugPrintf("當(dāng)前所在行號(hào):%d\r\n", __LINE__);
	DebugPrintf("當(dāng)前源文件名稱:%s\r\n", __FILE__);
	DebugPrintf("當(dāng)前固件編譯日期:%s\r\n", __DATE__);
	DebugPrintf("當(dāng)前固件編譯時(shí)間:%s\r\n", __TIME__);
	return 0;
}

四、STM32單片機(jī)上封裝printf函數(shù)

/*
函數(shù)功能: 字符串發(fā)送
*/
void USARTx_StringSend(USART_TypeDef *USARTx,u8 *str)
{
   while(*str!='\0')
   {
       USARTx->DR=*str++;
       while(!(USARTx->SR&1<<7)){}
   }
}

//printf函數(shù)底層函數(shù)接口
int fputc(int c, FILE* stream)
{
    USART1->DR=c;
    while(!(USART1->SR&1<<7)){}
    return c;
}

/*
函數(shù)功能: 格式化打印函數(shù)
*/
char USART1_PRINTF_BUFF[1024];
void USART1_Printf(char *fmt,...)
{
   va_list ap;
   /*1. 初始化形參列表*/
   va_start(ap,fmt);
   /*2. 提取可變形參數(shù)據(jù)*/
    vsprintf(USART1_PRINTF_BUFF,fmt,ap);
   /*3. 結(jié)束,釋放空間*/
    va_end(ap);
   /*4. 輸出數(shù)據(jù)到串口1*/
   USARTx_StringSend(USART1,(u8*)USART1_PRINTF_BUFF);
   
   //USART1_Printf("%d%s",123,454656); 
   //int data=va_arg(ap,int);
}

USART1_Printf的用法與printf是一樣的,通過(guò)這個(gè)函數(shù)就可以實(shí)現(xiàn)數(shù)據(jù)打印到任意地方,包括改成存儲(chǔ)到SD卡上。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6039

    文章

    44579

    瀏覽量

    636453
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137128
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3792

    瀏覽量

    81163
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    串口調(diào)試程序

    串口調(diào)試程序
    發(fā)表于 03-15 12:27 ?30次下載
    串口<b class='flag-5'>調(diào)試程序</b>

    基于Labview的通用串口調(diào)試程序

    基于Labview的通用串口調(diào)試程序 使用方法: 1.在baud rate里設(shè)置通訊的波特率 2.在milliseconds to wait的毫秒數(shù)要大于等于20,這樣可以保證收發(fā)數(shù)據(jù)的成 功率. 3.
    發(fā)表于 05-05 11:19 ?248次下載

    如何為程序代碼加上行號(hào)

    若需要將程序代碼放進(jìn)詞交報(bào)告或做文件時(shí),或許我們會(huì)想將程序代碼加上行號(hào)方便講解,如同博客園顯示程序代碼那樣,我們?cè)撊绾巫瞿兀?
    發(fā)表于 05-10 08:17 ?2196次閱讀

    微機(jī)原理調(diào)試程序

    微機(jī)原理調(diào)試程序,32位操作系統(tǒng)才能正常使用。
    發(fā)表于 11-09 14:47 ?2次下載

    903雙模程序-調(diào)試程序

    903雙模程序-調(diào)試程序 三相無(wú)刷BLDC應(yīng)用程序
    發(fā)表于 11-10 10:45 ?13次下載

    SSCOM32_串口調(diào)試程序

    串口調(diào)試程序 自己測(cè)試已經(jīng)通過(guò)可以使用
    發(fā)表于 12-24 10:52 ?59次下載

    串口調(diào)試程序

    串口調(diào)試程序,單片機(jī)學(xué)習(xí)好資料,歡迎下載學(xué)習(xí)。
    發(fā)表于 03-22 17:34 ?22次下載

    小車(chē)電機(jī)pwm調(diào)試程序

    小車(chē)電機(jī)pwm調(diào)試程序,原理圖配套,原理圖是按照驅(qū)動(dòng)芯片l298來(lái)實(shí)現(xiàn)的。
    發(fā)表于 04-05 15:36 ?9次下載

    智能小車(chē)調(diào)試程序

    智能小車(chē)51單片機(jī)調(diào)試程序,帶PWM調(diào)制和使能端控制。希望大家一起相互學(xué)習(xí)
    發(fā)表于 07-25 10:58 ?14次下載

    JTAG 鏈調(diào)試程序工具的作用及應(yīng)用

    JTAG 鏈調(diào)試程序工具
    的頭像 發(fā)表于 06-20 01:00 ?4044次閱讀
    JTAG 鏈<b class='flag-5'>調(diào)試程序</b>工具的作用及應(yīng)用

    串口調(diào)試程序火災(zāi)報(bào)警器調(diào)試工具C語(yǔ)言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是串口調(diào)試程序火災(zāi)報(bào)警器調(diào)試工具C語(yǔ)言程序免費(fèi)下載。
    發(fā)表于 10-22 17:39 ?36次下載
    串口<b class='flag-5'>調(diào)試</b>小<b class='flag-5'>程序</b>火災(zāi)報(bào)警器<b class='flag-5'>調(diào)試</b>工具<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>程序</b>免費(fèi)下載

    很實(shí)用的串口調(diào)試程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是很實(shí)用的串口調(diào)試程序免費(fèi)下載。
    發(fā)表于 01-17 08:00 ?5次下載
    很實(shí)用的串口<b class='flag-5'>調(diào)試程序</b>免費(fèi)下載

    Linux用日志打印的方式調(diào)試程序

    一般來(lái)說(shuō),初學(xué)編程者所寫(xiě)的第一個(gè)程序,就是使用printf打印“Hello world”。其實(shí)printf的功效遠(yuǎn)不只這些,在程序調(diào)試方面,printf也有非常大的用處。
    發(fā)表于 05-13 11:31 ?3549次閱讀

    基于STM32的藍(lán)牙HC05調(diào)試程序 通過(guò)手機(jī)控制STM32單片機(jī)程序

    基于STM32的藍(lán)牙HC05調(diào)試程序 通過(guò)手機(jī)控制STM32單片機(jī)程序
    發(fā)表于 11-24 12:36 ?122次下載
    基于STM32的藍(lán)牙HC05<b class='flag-5'>調(diào)試程序</b> 通過(guò)手機(jī)控制STM32單片機(jī)<b class='flag-5'>程序</b>

    STC串口驅(qū)動(dòng)調(diào)試程序

    STC的串口驅(qū)動(dòng)調(diào)試程序
    發(fā)表于 07-08 14:23 ?3次下載
    主站蜘蛛池模板: 狠狠色丁香久久综合婷婷| 黄色软件合集| 新版天堂中文资源官网| 五月网婷婷| 色吧五月婷婷| 美女淫| 精品伊人久久香线蕉| 大量喷潮free| 午夜视频免费| 激情五月宗合网| 黄色网欧美| 国产三级久久久精品三级| 亚洲综合激情丁香六月| 天堂中文在线观看| 欧美一级特黄aa大片视频| 黄色毛片免费看| 又黄又爽的成人免费网站| 天堂网www中文在线| 干得好爽| 午夜湿| 污女网站| 麻豆美女大尺度啪啪| www.色视频| 久久久免费观看| 亚洲免费区| 婷婷丁香综合| 精品一区二区三区自拍图片区| 亚洲综合激情| 最新黄色免费网站| 国产精品久久久久久久久久妇女| 天天摸天天做天天爽| 久久精品视频网站| 天天爽夜夜爽每晚高澡| 性欧美黑人| 亚洲综合色就色手机在线观看| 欧美三级在线观看视频| a理论片| 2021精品国产综合久久| 中国成人免费视频| 免费看你懂的| 天天躁天天狠天天透|