使用江科大串口发送函数发送freertos的vTaskList出现跑飞

Serial_Printf 无法正确打印 FreeRTOS 的 vTaskList 输出,核心原因在于 vTaskList 的输出格式要求 与 Serial_Printf 的实现方式 不匹配,具体分析如下:

1. vTaskList 的工作原理

vTaskList 是 FreeRTOS 用于打印任务列表的函数,其原型为:

复制代码
void vTaskList( char *pcWriteBuffer );
  • 它需要一个 足够大的字符数组(缓冲区) 作为参数,将任务信息(任务名、状态、优先级、栈剩余空间、任务编号)格式化后写入该缓冲区。

  • 输出格式是固定的表格形式(例如): plaintext

    复制代码
    Task Name  State  Prio  Stack  Num
    Idle       R      0     156    1
    Task1      B      2     200    2

2. Serial_Printf 无法直接打印的原因

Serial_Printf 的实现是:

复制代码
void Serial_Printf(char *format, ...)
{
    char String[100];				// 固定大小的缓冲区(100字节)
    va_list arg;					
    va_start(arg, format);			
    vsprintf(String, format, arg);	// 将格式化内容写入 String 数组
    va_end(arg);					
    Serial_SendString(String);		// 发送缓冲区内容
}
缓冲区大小不足

vTaskList 输出的任务列表长度与任务数量相关:

  • 每个任务至少占用约 30~50 字节(任务名 + 状态 + 优先级等信息)。
  • 若系统有 3~4 个任务,总长度就会超过 Serial_Printf 内部的 String[100] 缓冲区,导致 缓冲区溢出,内容被截断或错乱。
相关推荐
LCG米2 小时前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
La Pulga6 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
女神下凡10 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
硅基手札11 小时前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
何粥学13 小时前
Vivado 2024.2 开发记录(AC820 Zynq-7020)——软件使用,点亮led灯
单片机·嵌入式硬件·zynq
Sakura_j_h_14 小时前
51 单片机驱动四位数码管:动态扫描、限流电阻与消影的取舍
单片机·嵌入式硬件·51单片机·嵌入式·数码管·动态扫描·限流电阻
蹊黎1 天前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
无敌贵点大王1 天前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何1 天前
二进制和十六进制
stm32·单片机
国科安芯1 天前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射