女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

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

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

一、前言

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

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

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

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

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

二、打印示例

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

三、C語言封裝快捷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)出錯流設(shè)備  */
	va_end(arg_data);                            /*  可變參數(shù)列表結(jié)束  */
	return count;
}
#else
static inline int DebugPrintf(const char *format, ...)
{

}
#endif

通過DEBUG這個宏來開啟是否開啟調(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)出錯流設(shè)備  */
	va_end(arg_data);                            /*  可變參數(shù)列表結(jié)束  */
	return count;
}
#else
static inline int DebugPrintf(const char *format, ...)
{
	return 0;
}
#endif
int main()
{
	DebugPrintf("編譯日期與時間: %s,%s\n", __DATE__,__TIME__);
	DebugPrintf("當(dāng)前所在行號:%d\r\n", __LINE__);
	DebugPrintf("當(dāng)前源文件名稱:%s\r\n", __FILE__);
	DebugPrintf("當(dāng)前固件編譯日期:%s\r\n", __DATE__);
	DebugPrintf("當(dāng)前固件編譯時間:%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是一樣的,通過這個函數(shù)就可以實現(xiàn)數(shù)據(jù)打印到任意地方,包括改成存儲到SD卡上。

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

    關(guān)注

    6063

    文章

    44921

    瀏覽量

    646962
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

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

    關(guān)注

    117

    文章

    3823

    瀏覽量

    82414
收藏 人收藏

    評論

    相關(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 ?249次下載

    如何為程序代碼加上行號

    若需要將程序代碼放進(jìn)詞交報告或做文件時,或許我們會想將程序代碼加上行號方便講解,如同博客園顯示程序代碼那樣,我們該如何做呢?
    發(fā)表于 05-10 08:17 ?2272次閱讀

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

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

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

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

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

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

    串口調(diào)試程序

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

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

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

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

    智能小車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 ?4293次閱讀
    JTAG 鏈<b class='flag-5'>調(diào)試程序</b>工具的作用及應(yīng)用

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

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

    很實用的串口調(diào)試程序免費下載

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

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

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

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

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

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

    STC的串口驅(qū)動調(diào)試程序
    發(fā)表于 07-08 14:23 ?4次下載