[i=s] 本帖最后由 曹县 于 2024-1-9 16:14 编辑 [/i]<br />
<br />
宏定义调试打印功能
我们单片机有时候没法模拟调试,只能通过串口打印的信息看程序跑到哪里去了,所以需要增加一些打印标记,便于后续发现问题
但是打印太多的信息回占用io,对于一些设备来说消耗性能很大,所以一般正式固件就需要把打印关掉;
程序发布的时候,手动一个一个删除printf肯定不现实,而且容易出错,把代码搞坏了;
有时发布后还需要回来继续调试,所以需要一个开关可以一键把打印信息打开和关闭
这里介绍一种简单,烂大街,好用的方式:
/* debug 宏定义 */
#ifndef MY_DEBUG_H_
#define MY_DEBUG_H_
#define DEBUG 1
#if DEBUG
#define PRF(fmt, args...) \
do \
{ \
printf("< Line:%d :%s>> ", __LINE__, __FUNCTION__); \
printf(fmt, ##args); \
} while (0)
#else
#define DBG_PRINTF(fmt, args...)
#endif
#define LOG() \
do \
{ \
printf("< Line:%d :%s>> \n", __LINE__, __FUNCTION__); \
} while (0)
#endif /* MY_DEBUG_H_ */
#define DEBUG 1
int main()
{
uint32_t a = 23;
PRF("%d\n",a);
int b = 22;
}
gcc –E hello.c –o hello.i
预编译之后,代码就变成
#define DEBUG 1
int main()
{
uint32_t a = 23;
do \
{ \
printf("< Line:%d :%s>> ", __LINE__, __FUNCTION__); \
printf("%d\n",a); \
} while (0);
int b = 22;
}
把 DEBUG
宏弄成0就是
#define DEBUG 0
int main()
{
uint32_t a = 23;
int b = 22;
}