配音阁在线制作网站,网站班级文化建设,手机网站预约表单,手机赚钱方式1#xff0c;移植第三方printf库#xff1a;
1. 下载地址#xff1a;https://github.com/mpaland/printf
2. 拷贝其中的printf.c和printf.h到本地#xff1b;
3. 重新实现 void _putchar(char character) 接口#xff0c;使用具体串口发送ch数据#xff0c;如在 u…方式1移植第三方printf库
1. 下载地址https://github.com/mpaland/printf
2. 拷贝其中的printf.c和printf.h到本地
3. 重新实现 void _putchar(char character) 接口使用具体串口发送ch数据如在 uart_hal.c中重新实现该接口
void _putchar(char character)
{UART_TypeDef *base g_uart_bases[UART_CONSOLE_INSTANCE];uint32_t tmp_d character;tmp_d 0xff;uart_drv_fput_char(base, tmp_d);
}
使用时可通过在printf.c开头部分或printf.h中增加或注释如下宏定义来关闭或开启特定打印模式
#define PRINTF_DISABLE_SUPPORT_FLOAT // 是否支持 %f 类的打印
#define PRINTF_DISABLE_SUPPORT_EXPONENTIAL // 是否支持 %e 类的打印
#define PRINTF_DISABLE_SUPPORT_LONG_LONG // 是否支持 %lld 类的打印
#define PRINTF_DISABLE_SUPPORT_PTRDIFF_T // 是否支持 %ld 类的打印
方式2重新实现系统调用
1. 新增syscall.c文件在其中添加如下代码
extern int __io_putchar(int ch);int _write(int file, char *ptr, int len)
{int DataIdx;for (DataIdx 0; DataIdx len; DataIdx){__io_putchar( *ptr );}return len;
}
2. 重新实现 int __io_putchar(int ch) 接口使用具体串口发送ch数据如在 uart_hal.c中重新实现该接口
int __io_putchar(int ch)
{UART_TypeDef *base g_uart_bases[UART_CONSOLE_INSTANCE];uart_drv_fput_char(base, ch);return ch;
} 两种printf实现方式的比较
移植第三方printf库的优缺点
优点 除几个标准库外不依赖其他实现 可单独控制 %f,%e,%lld,%ld格式的打印实现可根据需要精确控制 可更进一步对代码进行裁剪如不使用sprintf类接口可对相关代码进行裁剪 缺点 相同优化等级下比实现系统调用方式代码体积大一些(只支持%d %s打印时在optO2时比前者大1.7kb) 重新实现系统调用方式的优缺点
优点 相同优化等级下比移植第三方库代码体积小一些 缺点 不支持%f,%e,%lld类的打印 代码不可裁剪