FreeRTOS 任务概述

任务状态

一个任务的状态可以是下面中的某一个:
1. 运行
2. 就绪:就绪的任务已经具备执行的能力(不同于阻塞和挂起),但是因为有一个同优先级或者更高优先级的任务处于运行状态而还没有真正执行。
3. 阻塞:如果任务当前正在等待某个时序或外部中断,我们就说这个任务处于阻塞状态。比如一个任务调用vTaskDelay()后会阻塞到延时周期到为止。任务也可能阻塞在队列或信号量事件上。进入阻塞状态的任务通常有一个“超时”周期,当事件超时后解除阻塞。
4. 挂起:处于挂起状态的任务同样对调度器无效。仅当明确的分别调用 vTaskSuspend() 和 xTaskResume() API函数后,任务才会进入或退出挂起状态。不可以指定超时周期事件(不可以通过设定超时事件而退出挂起状态)。

任务状态

任务优先级

每个任务都要被指定一个优先级,从0 ~ configMAX_PRIORITIES,configMAX_PRIORITIES 定义在 FreeRTOSConfig.h 中。
小数值代表低优先级。空闲任务(idle task)的优先级为0(tskIDLE_PRIORITY)。
任何数量的任务可以共享同一个优先级。如果宏configUSE_TIME_SLICING未定义或着宏configUSE_TIME_SLICING定义为1,处于就绪态的多个相同优先级任务将会以时间片切换的方式共享处理器。

实现一个任务

一个任务具有以下结构:

void vATaskFunction( voidvoid *pvParameters )  
{  
    for( ;; )  
    {  
        /* 应用程序代码放在这里 */  
    }  

    /* 如果一个任务确实要退出函数,那么这个任务应调用vTaskDelete(NULL) 
    函数,以便处理一些清理工作。*/  
    vTaskDelete( NULL );  
}  

任务函数返回为void,参数只有一个void类型指针。所有的任务函数都应该是这样。void类型指针可以向任务传递任意类型信息。 通常任务函数都是一个死循环。
任务由xTaskCreate()函数创建,由vTaskDelete()函数删除。

空闲任务和空闲任务钩子

空闲任务(IDLE Task)

IDLE 任务在函数 vTaskStartScheduler() 中被创建。

空闲任务是启动RTOS调度器时由内核自动创建的任务,这样可以确保至少有一个任务在运行。空闲任务具有最低任务优先级,这样如果有其它更高优先级的任务进入就绪态就可以立刻让出CPU。
删除任务后,空闲任务用来释放RTOS分配给被删除任务的内存。因此,在应用中使用vTaskDelete()函数后确保空闲任务能获得处理器时间就很重要了。除此之外,空闲任务没有其它有效功能,所以可以被合理的剥夺处理器时间,并且它的优先级也是最低的。

空闲任务钩子(IDLE Task Hook)

空闲任务钩子是一个函数(移植时,非必须的函数),每一个空闲任务周期被调用一次。

#if ( configUSE_IDLE_HOOK == 1 )
{
    extern void vApplicationIdleHook( void );

    /* Call the user defined function from within the idle task.  This
        allows the application designer to add background functionality
        without the overhead of a separate task.
        NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES,
        CALL A FUNCTION THAT MIGHT BLOCK. 
    */
    vApplicationIdleHook();
}
#endif /* configUSE_IDLE_HOOK */
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值