freertos任务管理器,任务监控

发布时间:2024年01月12日

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

里创建

附:

任务可以存在于以下状态中:

  • 运行-----X

    当任务实际执行时,它被称为处于运行状态。 任务当前正在使用处理器。 如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。

  • 准备就绪----R

    准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。

  • 阻塞---------B

    如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。 例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。 任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量 事件。 处于阻塞状态的任务通常有一个"超时"期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。

    “阻塞”状态下的任务不使用任何处理时间,不能 被选择进入运行状态。

  • 挂起---------S

    与“阻塞”状态下的任务一样, “挂起”状态下的任务不能 被选择进入运行状态,但处于挂起状态的任务 没有超时。 相反,任务只有在分别通过 vTaskSuspend() 和 xTaskResume() API 调用明确命令时 才会进入或退出挂起状态。

文章来源:https://blog.csdn.net/baowxz/article/details/135552210
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。