FREERTOS学习笔记,任务管理三

本文详细介绍了FreeRTOS中的空闲任务及其回调函数的使用,包括空闲任务回调函数的作用和限制性。此外,还讨论了如何改变任务优先级、删除任务以及FREERTOS的进程调度算法,特别是固定优先级抢占式调度带时间片的实现。
摘要由CSDN通过智能技术生成

空闲任务

当所有任务进入阻塞状态时,此时处理器处于空闲状态,然而FREERTOS规定必须至少有一个任务处于运行状态,为了保证这种状态,调度器会自动创建一个空闲任务,当所有任务处于阻塞状态时就会自动产生一个空闲任务来执行,空闲任务具有最小优先级(设为0),为了防止空闲任务阻止其他任务的执行。
注意:如果一个应用使用了vTaskDelete()来销毁一个任务,此时空闲任务并不会被其他任务饿死,因为当销毁一个任务后需要空闲任务来清除内核资源。

空闲任务回调函数

内核给应用层提供了一个空闲任务回调函数接口,当执行空闲任务时会执行该函数。
空闲任务回调函数的作用:
执行低优先级程序,后台程序或一个持续性程序函数。
测量剩余处理器能力。
使处理器进入低功耗模式,提供一个容易并且自动的方法来节省电力。

空闲任务回调函数的限制性

空闲任务函数必须永远不能阻塞或挂起。
当应用层执行vTaskDelete() 函数后,空闲任务回调函数无论在什么情况下必须马上返回,这是因为在任务清除后必须马上使用空闲任务来清理内核资源,如果空闲任务在执行回调函数,则不能马上清除内核资源,从而出现问题。

空闲任务回调函数的原型为:

void vApplicationIdleHook( void );

FreeRTOSConfig.h中的configUSE_IDLE_HOOK必须设置为1,此时空闲任务回调函数才有效。

下面为一个空闲任务回调函数的例子:

/* Declare a variable that will be incremented by the hook function. */
volatile uint32_t ulIdleCycleCount = 0UL;
/* Idle hook functions MUST be called vApplicationIdleHook(), take no parameters,
and return void. */
void vApplicationIdleHook( void )
{
   
/* This hook function does nothing but increment a counter. */
ulIdleCycleCount++;
}

在其他任务中打印出计数的值:

void vTaskFunction( void *pvParameters )
{
   
char *pcTaskName;
const TickType_t xDelay250ms = pdMS_TO_TICKS( 250 );
/* The string to print out is passed in via the parameter. Cast this to a
character pointer. */
pcTaskName = ( char * ) pvParameters;
/* As per most tasks, this task is implemented in an infinite loop. */
for( ;; )
{
   
/* Print out the name of this task AND the number of times ulIdleCycleCount
has been incremented. */
vPrintStringAndNumber( pcTaskName, ulIdleCycleCount );
/* Delay for a period of 250 milliseconds. */
vTaskDelay( xDelay250ms );
}
}

此时的结果为:
在这里插入图片描述
由此可以看出在空闲任务重回调函数循环执行了多少次。

改变任务的优先级

vTaskPrioritySet()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值