发帖
9 0 0

宏定义调试打印功能

曹县
金牌会员

7

主题

196

回帖

2025

积分

金牌会员

积分
2025
技术杂谈 832 9 2024-1-8 10:11:05

[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;
}
──── 0人觉得很赞 ────

使用道具 举报

2024-1-8 10:19:10
真不错
2024-1-8 10:31:41
2024-1-8 10:36:39
2024-1-8 10:57:44
2024-1-8 11:06:09
2024-1-8 15:24:30
真不错
2024-1-8 19:56:19
不支持markdown语法显示吗?
2024-1-9 16:14:35
is麟儿 发表于 2024-1-8 19:56
不支持markdown语法显示吗?

刚刚搞了一下,原来用错编辑器了
2024-1-9 16:48:54
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28241 个
  • 话题数: 40188 篇