threadx 添加串口打印功能
本系列教程均基于正点原子 L475 潘多拉开发板为硬件平台。项目开源地址 github 地址
threadx 移植(一)-CubeIDE 新建 LED 闪烁工程
threadx 移植(二)-基于 CubeIDE 移植 threadx
threadx 移植(三)-添加串口打印功能
CubeMX 配置串口引脚
配置引脚如下图
实现输出重定向函数
main.c 文件中定义数组
char debug_buf
[128];
main.h 文件中实现函数
#include<stdio.h>
extern char debug_buf
[128];
extern UART_HandleTypeDef huart1
;
#define debug(...){ \
int len = 0; \
len = snprintf(debug_buf, 128, __VA_ARGS__); \
if (len > 0) \
{ \
HAL_UART_Transmit(&huart1, (uint8_t *)debug_buf, len, HAL_MAX_DELAY);\
} \
}
新建线程输出打印
#include "tx_api.h"
char debug_buf
[128];
TX_THREAD led_thread
;
TX_THREAD printf_thread
;
#define DEMO_STACK_SIZE 4096
static uint8_t led_thread_stack
[DEMO_STACK_SIZE
];
static uint8_t printf_thread_stack
[DEMO_STACK_SIZE
];
void led_thread_entry(ULONG thread_input
)
{
while(1)
{
HAL_GPIO_WritePin(GPIOE
, GPIO_PIN_7
, GPIO_PIN_RESET
);
tx_thread_sleep(1000);
HAL_GPIO_WritePin(GPIOE
, GPIO_PIN_7
, GPIO_PIN_SET
);
tx_thread_sleep(1000);
}
}
void printf_thread_entry(ULONG thread_input
)
{
while(1)
{
debug("hello tyustli\r\n");
tx_thread_sleep(1000);
}
}
void tx_application_define(void *first_unused_memory
)
{
tx_thread_create(&led_thread
,
"led thread",
led_thread_entry
,
0,
led_thread_stack
,
DEMO_STACK_SIZE
,
1,
1,
TX_NO_TIME_SLICE
,
TX_AUTO_START
);
tx_thread_create(&printf_thread
,
"printf thread",
printf_thread_entry
,
0,
printf_thread_stack
,
DEMO_STACK_SIZE
,
2,
2,
TX_NO_TIME_SLICE
,
TX_AUTO_START
);
}
串口输出结果如下