车规级MCU开发,不像PC端,包含stdio.h头文件就可以使用Printf()函数。为了实现PC端Printf()接口功能,需要在MCU端实现Printf()接口的"重定向"。所谓的重定向,就是重新定义Printf()接口函数里调用的与输出设备相关的函数,eg:使用Printf()接口将MCU中的信息,通过串口或者Ethernet输出到终端上位机。
所以,如果要实现Printf()接口的重定向,选择合适的MCU驱动是第一步,本文选择UART(Universal Asynchronous Receiver-Transmitter)实现Printf()接口的重定向,讨论如何实现Printf()接口重定向到UART。
1、UART驱动实现
对于UART驱动的实现,根据芯片类型而定。本文使用TC397,文末给出源码,不做具体讨论。
2、重定向Printf()
重定向Printf()接口,本文重新命名为Debugger_printf(),在Debugger_printf()接口中调用UART驱动发送接口sendUARTMessage(),Debugger_printf()接口代码示意如下:
(一)头文件
Debugger_printf()接口中需要包含头文件,因为在如上代码中使用到了宏va_list,而宏va_list在头文件中定义。头文件并不在工程文件中,而是在Mingw64编译环境库中,示意如下:
除了宏va_list之外,使用到的va_start(v,l)、va_end(v)等也在头文件中。
3、Debugger_printf()使用
完成Debugger_printf()接口重定向以后,即可在程序任意需要输出信息的位置打印log,之后在串口终端中显示信息。eg:在main线程中打印信息,代码示意如下:
输出的log信息如下所示:
-
mcu
+关注
关注
146文章
17395浏览量
353161 -
接口
+关注
关注
33文章
8748浏览量
152175 -
uart
+关注
关注
22文章
1245浏览量
101934 -
代码
+关注
关注
30文章
4846浏览量
69267 -
Printf
+关注
关注
0文章
83浏览量
13760
发布评论请先 登录
相关推荐
STM32使用串口重定向系统
实现printf函数的重定向
使用printf()函数时默认UART0输出,请教如何重定向printf()到UART1?
实现重定向printf()和scanf() 函数案例分析

Keil下使用STlink重定向printf的配置

评论