关于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 //注释这个宏定义