1 printf存在的问题
1.1 打印错乱

由于任务被切换执行,导致了打印错乱的发生。
1.2 printf函数的不可重入
printf()不能同时被多个任务调用,属于不可重入函数。
解决方式:调用printf之前进行上锁,使用完之后再开锁。
1.3 printf重映射串口打印耗时
原因:
在以115200波特率进行计算,打印200byte需要耗时约19ms。串口打印影响了程序运行的实时性。
解决办法:
把串口阻塞发送改为先存入buffer中,然后通过中断或者DMA发送出去。

2 自定义调试打印组件的实现思路
debug_printf实现思路:

debug_printf代码实现流程:

3 代码实现
代码实现其实也很简单,没什么需要注意的地方,如下:
app_debug.h:
#ifndef __APP_DEBUG_H
#define __APP_DEBUG_H
#include "Freertos.h"
#include "task.h"
#define DEBUG(fmt, arg...) debug_printf("[%lu][%s:%d]" fmt "\r\n", xTaskGetTickCount()/1000, __func__, __LINE__, ##arg)
void debug_init(void);
void debug_uart_handler(void);
void debug_printf(const char *fmt,...);
改进printf调试打印

最低0.47元/天 解锁文章
17万+

被折叠的 条评论
为什么被折叠?



