freertos提供了类似于windows的任务管理器功能,具体地如下:
if(idleTaskCounter%8==4)
{
char printlist[2048];
vTaskList(printlist);
Printf("%s",printlist);
}
任务名? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 状态? ? ?优先级 栈剩余? 编号
IdleTask? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?X? ? ?10?? ?2039?? ?14
LwipifEnetApp_RxPacketTask ? ? ?? ?????????R? ? ?8?? ?63?? ?11
LwipifEnetApp_TxPacketTask ? ? ?? ?????????R? ? ?8?? ?349?? ?10
IDLE? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?R?? ?0?? ?1963?? ?5
freertos_main? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?B?? ?31?? ?1359?? ?3
其中栈剩余,表示历史运行过程中最小剩余的值,这个单位是字,不是字节
状态X表示正在运行,我这个是放在自定义空闲任务里的,所以在IdleTask 里是X
B:阻塞态,
R:就绪态,
S:挂起态,
D:删除态
注意打印的有一行的是
Tmr Svc ? ? ? ? ? ? ? ? ? ? ? ??? ?B?? ?31?? ?147?? ?6
这个是一般是定时器任务,默认256字,在freertos内核:
source\kernel\freertos\FreeRTOS-Kernel\timers.c
里创建
附:
任务可以存在于以下状态中:
- 运行-----X
当任务实际执行时,它被称为处于运行状态。 任务当前正在使用处理器。 如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。
- 准备就绪----R
准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。
- 阻塞---------B
如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。 例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。 任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量 事件。 处于阻塞状态的任务通常有一个"超时"期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。
“阻塞”状态下的任务不使用任何处理时间,不能 被选择进入运行状态。
- 挂起---------S
与“阻塞”状态下的任务一样, “挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务 没有超时。 相反,任务只有在分别通过 vTaskSuspend() 和 xTaskResume() API 调用明确命令时 才会进入或退出挂起状态。