RTOS下的任务管理

2.3 RTOS下的任务管理(***)

RTOS的任务管理主要是进行哪些功能?

RTOS的任务管理的多任务管理是怎样进行与实现的?

任务管理中FreeRTOS如何给每个任务分配CPU时间?

2.3.0 任务概述

​ 任务管理算是FreeRTOS中核心以及重点内容。简而言之,后续代码移植嫁接便是在任务管理的基础上进行的。对于任务管理的重中之重则是在于多任务管理。任务具有一系列状态以及优先级(Priority)等相关属性。任务的一系列相关数据是在栈中保存的,多个任务之间的协作处理[^231]称之为任务调度(即CPU按照某种算法策略进行不同任务间的切换)

​ 任务即需要完成的一件件功能,也称之为“线程(thread)”,需要注意的RTOS中一个完整的任务由任务栈(Stack)+任务控制块(TCB)组成。

任务的几大相关状态:

  • 运行态
  • 非运行态:
    • 就绪态(ready)
    • 阻塞(blocked)
    • 挂起(suspended)
2.3.1任务的创建与删除

RTOS任务相关的函数有哪些?怎样创建任务

​ 在RTOS中任务的本质即一个函数,其这个函数不能有返回,一个任务式的函数通常如下:

  • 其传递的形参通常为指针类型
  • 各自任务存在各自栈的备份(副本)
void ATaskFunction( void *pvParameters )
{
   
    /* 对于不同的任务,局部变量放在任务的栈里,有各自的副本 */
    int32_t lVariableExample = 0;
    /* 任务函数通常实现为一个无限循环 */
    for( ;; )
    {
   
    /* 任务的代码 */
    }
    /* 如果程序从循环中退出,一定要使用vTaskDelete删除自己
    * NULL表示删除的是自己
    */
    vTaskDelete( NULL );
    /* 程序不会执行到这里, 如果执行到这里就出错了 */
}

​ RTOS进行任务创建时主要有两种函数:

  • 动态分配内存创建相关结构体

    /**
    *@return:成功则返回相关pass
    */
    BaseType_t xTaskCreate(	
        	/*函数指针,也就是任务体*/
        						TaskFunction_t pxTaskCode,
        /*任务名*/
    							const char * const pcName,
        /*设置任务栈大小,单位为word(字),一个字占4个字节,大多时候估计方法,精确值的话看反汇编*/
    							const configSTACK_DEPTH_TYPE usStackDepth,
        /*调用pvTaskCode(任务函数)是用到的参数 ,并将相关参数传送到对应的任务函数指针中*/
    							void * const pvParameters,
    	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值