该部分在上份代码基础上修改得来,代码下载链接:
https://wwzr.lanzout.com/in63o1lauwwh
密码:9bhf
该代码尽量做到最简,不添加多余的、不规范的代码。
内容主要包括:
最终实现效果:
在FreeRTOS中,要打印任务的空闲栈(空余空间),可以使用任务状态查询函数 uxTaskGetStackHighWaterMark
。这个函数返回任务栈的最小可用空间(以字为单位,32位系统中,1字=4字节=32位)
示例:
UBaseType_t freeStack;
// 获取任务空闲栈
freeStack= uxTaskGetStackHighWaterMark(NULL);
// 打印任务空闲栈 (以字为单位)
printf("Task %s free stack: %u words\n", pcTaskGetName(NULL), freeStack);
实例:
要打印所有任务的栈信息,你可以使用FreeRTOS的任务列表查询函数 vTaskList
。
// 定义一个缓冲区,用于存储任务列表信息
char g_taskListBuffer[1024];
// 获取任务列表信息
vTaskList(g_taskListBuffer);
// 打印任务列表
printf("Task List:\n%s", g_taskListBuffer);
需要在stm32cubemx中使能use_stats_formatting_functions
参数。
实例:
每列的具体含义:
vTaskGetRunTimeStats
是一个 FreeRTOS 函数,用于获取系统中每个任务的运行时间统计信息。这个函数允许你了解每个任务在系统中的运行时间百分比,以及每个任务实际运行的时钟滴答数。
示例:
// 定义一个缓冲区,用于存储CPU占用比信息
char g_taskListBuffer[1024];
// 获取运行时间统计信息
vTaskGetRunTimeStats(g_taskListBuffer);
// 打印运行时间统计信息
printf("Run Time Stats:\n%s\n", g_taskListBuffer);
1 需要在stm32cubemx中使能generate_run_time_stats
参数。
2 该函数需要用到getRunTimeCounterValue()
函数来获取系统时间,但cubemx并未实例化这个函数。需要自己实现。
cubemx生成的:
需要自己实现:
实例:
FreeRTOS 中的空闲任务是一个特殊的任务,优先级为0。
通常用于在系统没有其他任务执行时执行一些低优先级的任务。这个任务的名称通常是 “Idle”。
此外,FreeRTOS 还提供了与空闲任务关联的钩子函数,空闲任务的循环每执行一次,就会调用一次钩子函数vApplicationIdleHook()
。
钩子函数****的作用:
因此,我们改用空闲任务提供的钩子函数,来显示之前的调试信息,是比较合理的。
首先,需要在stm32cubemx中使能use_idle_hook
参数。
将调试代码,移到钩子函数中