FreeRTOS之查看任务的信息
在 FreeRTOS 中,我们也可以查看任务使用 CPU 的情况、使用栈的情况,然后针对性地进行优化。
这就是查看"任务的统计"信息。
13.2.1 栈使用情况
在创建任务时分配了栈,可以填入固定的数值比如 0xa5,以后可以使用以下函数查看
"栈的高水位",也就是还有多少空余的栈空间:
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
原理是:从栈底往栈顶逐个字节地判断,它们的值持续是 0xa5 就表示它是空闲的。
函数说明:
13.2.2 任务运行时间统计
对于同优先级的任务,它们按照时间片轮流运行:你执行一个 Tick,我执行一个 Tick。
是否可以在 Tick 中断函数中,统计当前任务的累计运行时间?
不行!很不精确,因为有更高优先级的任务就绪时,当前任务还没运行一个完整的
Tick 就被抢占了。
我们需要比 Tick 更快的时钟,比如 Tick 周期时 1ms,我们可以使用另一个定时器,
让它发生中断的周期时 0.1ms 甚至更短。
使用这个定时器来衡量一个任务的运行时间,原理如下图所示:
切换到 Task1 时,使用更快的定时器记录当前时间 T1
Task1 被切换出去时,使用更快的定时器记录当前时间 T4
(T4-T1)就是它运行的时间,累加起来