freertos提供了类似于windows的任务管理器功能,具体地如下:
1、configUSE_TRACE_FACILITY 和 configUSE_TRACE_FACILITY使能置1
2、调用vTaskList,如下:
if(idleTaskCounter%8==4){char printlist[2048];vTaskList(printlist);Printf("%s",printlist);}
3、输出如下:
任务名 状态 优先级 栈剩余 编号
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
里创建。
=========================================================================
另外还有个CPU监控的函数vTaskGetRunTimeStats,和上面类似
1>打开宏和定义
#define configGENERATE_RUN_TIME_STATS 1//打开运行时间统计功能#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats//初始化硬件定时器#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue//获取定时器的计数值
2> 调用vTaskGetRunTimeStats
DPRTOS_Log("CPU:\r\n");vTaskGetRunTimeStats(printlist);DPRTOS_Log("%s",printlist);
3>、输出:
比较简单。
另附:
任务可以存在于以下状态中:
- 运行-----X
当任务实际执行时,它被称为处于运行状态。 任务当前正在使用处理器。 如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。
- 准备就绪----R
准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。
- 阻塞---------B
如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。 例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。 任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量 事件。 处于阻塞状态的任务通常有一个"超时"期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。
“阻塞”状态下的任务不使用任何处理时间,不能 被选择进入运行状态。
- 挂起---------S
与“阻塞”状态下的任务一样, “挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务 没有超时。 相反,任务只有在分别通过 vTaskSuspend() 和 xTaskResume() API 调用明确命令时 才会进入或退出挂起状态。