实现嵌入式的debug和release模式

关于debug和release模式

debug模式
通常在debug模式下开发,在代码中添加一些打印输出函数,将测试数据打印到上位机上,方便调测

release模式
使用release模式下的代码,生成正式版本的固件,用于实际的生产。该模式下通常会屏蔽所有用于开发阶段调测的打印函数

实现debug和release模式的2种方法

方法一:printf重定向 + 可变参数宏

这个方法适用于兼容C99模式的开发环境,因为可变参数宏是在C99标准中引入的。

第一步、printf重定向
首先实现uart串口传输功能;然后在.c文件中重写fputc函数

/*
32位单片机是 fputc() 函数
同时需要在keil的options-> target中勾选 Use MicroLIB
*/
#include <stdio.h>
int fputc(int ch, FILE* stream)
{
 	/*
 	这里需要自己实现把一个字符发送到Tx输出缓冲器中
 	*/
	return ch;
}

第二步、实现可变参数宏
在.h文件中定义打印函数

#define DEBUG

#define Printf(format, ...) printf(format, __VA_ARGS__)

#else

#define Printf(format, ...) 

方法二:printf重定向 + 自定义宏**

这个方法适用于C89模的开发环境(8位单片机的开发环境),能够保证编译后打印函数不存在。

第一步、printf重定向
首先实现uart串口传输功能;然后然后在.c文件中重写putchar函数或者fputc函数

/*8位单片机是 putchar() 函数*/
#include <stdio.h>
char putchar(char ch)
{
 	/*
 	这里需要自己实现把一个字符发送到Tx输出缓冲器中
 	*/
    return ch;
}


/*
32位单片机是 fputc() 函数
同时需要在keil的options-> target中勾选 Use MicroLIB
*/
#include <stdio.h>
int fputc(int ch, FILE* stream)
{
 	/*
 	这里需要自己实现把一个字符发送到Tx输出缓冲器中
 	*/
	return ch;
}


第二步、用宏实现打印函数
在.h文件中定义多个宏,每个宏的参数个数不一样

/*复制可用*/
#ifdef DEBUG 
#define Printf(str)                                      printf(str)
#define Printf1(str,para1)                               printf(str,para1)
#define Printf2(str,para1,para2)                         printf(str,para1,para2)
#define Printf3(str,para1,para2,para3)                   printf(str,para1,para2,para3)
#define Printf4(str,para1,para2,para3,para4)             printf(str,para1,para2,para3,para4)
#define Printf5(str,para1,para2,para3,para4,para5)       printf(str,para1,para2,para3,para4,para5)
#define Printf6(str,para1,para2,para3,para4,para5,para6)                           printf(str,para1,para2,para3,para4,para5,para6)
#define Printf7(str,para1,para2,para3,para4,para5,para6,para7)                     printf(str,para1,para2,para3,para4,para5,para6,para7)
#define Printf8(str,para1,para2,para3,para4,para5,para6,para7,para8)               printf(str,para1,para2,para3,para4,para5,para6,para7,para8)

#else

#define Printf(str) 
#define Printf1(str,para1) 
#define Printf2(str,para1,para2) 
#define Printf3(str,para1,para2,para3) 
#define Printf4(str,para1,para2,para3,para4) 
#define Printf5(str,para1,para2,para3,para4,para5) 
#define Printf6(str,para1,para2,para3,para4,para5,para6) 
#define Printf7(str,para1,para2,para3,para4,para5,para6,para7) 
#define Printf8(str,para1,para2,para3,para4,para5,para6,para7,para8) 
#endif

如何切换debug和release模式

debug模式

#ifdef DEBUG //打开这个宏定义

release模式

//#ifdef DEBUG //注释这个宏定义
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值