用过stm32的人应该在调试串口的时候都用过重定义的printf它可以和c语言中的printf一样的使用。如何实现这么一个函数呢?
标准库
#include <stdarg.h>
里面主要用的还是这几个
void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);
其中va_list
的原型
typedef struct {
char *a0; /* pointer to first homed integer argument */
int offset; /* byte offset of next parameter */
} va_list;
va_list是与变参列表相关的结构,里面保存着变参列表的信息包括变参列表的指针。
测试
#include <stdarg.h>
#include <stdio.h>
void My_Printf(const char *fmt,...)
{
va_list ap;
char string[50];//缓冲区大小
va_start(ap,fmt);
vsprintf(string,fmt,ap);
puts(string); //在单片机中使用只需要将这里切换串口发送字符串函数
va_end(ap);
}
void main(void)
{
float float1=1.23423f;