freertos任务管理器,任务监控

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 调用明确命令时 才会进入或退出挂起状态。

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值