FreeRTOS任务详解

一、任务的创建与删除

1.任务的基本概念

       RTOS系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习 RTOS 系统的工程 师或者学生主要就是为了使用 RTOS 的多任务处理功能,初步上手 RTOS 系统首先必须掌握的 也是任务的创建、删除、挂起和恢复等操作,由此可见任务管理的重要性

2.什么是多任务系统?

       回想一下我们以前在使用 51、STM32 单片机裸机(未使用系统)的时候一般都是在 main 函数里面用 while(1)做一个大循环来完成所有的处理,即应用程序是一个无限的循环,循环中调用相应的函数完成所需的处理。有时候我们也需要中断中完成一些处理。相对于多任务系统而言,这个就是单任务系统,也称作前后台系统中断服务函数作为前台程序,大循环 while(1)作为后台程序

​ 

3.任务创建与删除相关函数

任务创建与删除相关函数有如下三个:

函数名称
函数作用
xTaskCreate()
动态方式创建任务
xTaskCreateStatic() 静态方式创建任务(不常用)
vTaskDelete() 删除任务
任务动态创建与静态创建的区别:
  • 动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。
  • 通常情况下使用动态方式创建任务。

xTaskCreate 函数原型

 

  • pxTaskCode: 指向任务函数的指针。

  • pcName: 任务名称的字符串。

  • usStackDepth: 任务堆栈的大小,以字节为单位。

  • pvParameters: 传递给任务函数的参数指针。

  • uxPriority: 任务的优先级,数值越大表示优先级越高。

  • pxCreatedTask: 任务句柄的指针,用于返回创建的任务句柄。

返回值
描述
pdPASS 任务创建成功
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 任务创建失败

 vTaskDelete 函数原型

void vTaskDelete(TaskHandle_t xTaskToDelete);
  • 只需将待删除的任务句柄传入该函数,即可将该任务删除。
  • 当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)。
  1. 创建任务

在FreeRTOS中,任务的创建主要包括以下步骤:

  1. 定义任务句柄变量:

任务句柄是一个指向任务控制块(TCB)的指针,用于引用和管理任务。您需要在任务函数外定义一个任务句柄变量,例如:

TaskHandle_t xTaskHandle;
  1. 编写任务函数:

任务函数是实现任务功能的函数,可以在函数内部调用FreeRTOS提供的各种API函数来实现任务通信、同步、延时等功能。任务函数的原型如下:

void vTaskFunction(void *pvParameters);

参数 pvParameters 是一个指向参数的指针,可以将任务函数的输入参数通过 pvParameters 传递给任务函数。

  1. 创建任务:

使用API函数 xTaskCreate() 创建任务。该函数原型如下:

 
 
  1. BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,

  2. constchar * const pcName,

  3. const configSTACK_DEPTH_TYPE usStackDepth,

  4. void * const pvParameters,

  5. UBase

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值