FreeRTOS 任务的创建与删除

简介: FreeRTOS 任务的创建与删除

1. 什么是任务?

任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。


任务可以被认为是一组函数,它们在运行时相互协作以完成特定的目标。


在 FreeROTS 中,任务可以分配不同的优先级,并按照优先级进行调度。当一个任务没有工作可以做时,操作系统会将 CPU 时间分配给另一个优先级更高的任务,以确保系统的正常运行。


任务通常都含有 while(1) 死循环。


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

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

                               函数名称                                  函数作用
xTaskCreate() 动态方式创建任务
xTaskCreateStatic() 静态方式创建任务
vTaskDelete() 删除任务


任务动态创建与静态创建的区别:

动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。 通常情况下使用动态方式创建任务。


xTaskCreate 函数原型

8092b04a65901e5c75df2262081e3080_d5b498f1a5fb4c438bce3f4c35bc8e85.png

1. pxTaskCode:指向任务函数的指针,任务必须实现为永不返回(即连续循环);


2. pcName:任务的名字,主要是用来调试,默认情况下最大长度是16;


3. pvParameters:指定的任务栈的大小;


4. uxPriority:任务优先级,数值越大,优先级越大;


5. pxCreatedTask:用于返回已创建任务的句柄可以被引用。

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

vTaskDelete 函数原型

void vTaskDelete(TaskHandle_t xTaskToDelete);

只需将待删除的任务句柄传入该函数,即可将该任务删除。


当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)。


3. 创建两个任务进行点灯实操

使用CubeMX快速移植

将FreeRTOS移植到STM32F103C8T6,具体看我写过的文章FreeRTOS移植到STM32F103C8T6


1.增加两个任务

2.查看原理图,设置两个LED灯的引脚为输出引脚

3.导出代码后加入下面代码,编译烧录32单片机

打开freertos.c文件

void StartTaskLED1(void const * argument)
{
  for(;;)
  {
  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
    osDelay(500);
  }
}
 
 
void StartTaskLED2(void const * argument)
{
  for(;;)
  {
  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    osDelay(1000);
  }
}
相关文章
栈大小可以怎么改?
栈大小可以怎么改?
|
存储 自然语言处理 算法
|
11月前
|
存储 安全 API
基于FreeRTOS中的串口不定长接收(使用队列进行数据传输)
基于FreeRTOS中的串口不定长接收(使用队列进行数据传输)
1094 0
|
编译器 调度
FreeRTOS任务的创建(动态方法和静态方法)
FreeRTOS任务的创建(动态方法和静态方法)
2000 0
|
数据采集 人工智能 物联网
|
算法 调度 开发者
FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
1210 0
|
数据采集 API 数据处理
FreeRTOS入门教程(软件定时器)
FreeRTOS入门教程(软件定时器)
487 0
STM32CubeMX PWM
STM32CubeMX PWM
368 9
|
API 调度
FreeRTOS学习笔记—任务创建和删除
本文学习了如何创建和删除任务。最后,分析解决了遇到的问题。
391 0
|
存储 安全 算法
从0入门FreeRTOS之第二节FreeRTOS的体系结构
FreeRTOS的体系结构设计精巧且高效,专为嵌入式系统量身打造。理解FreeRTOS的体系结构对开发高效、稳定的嵌入式应用至关重要。下面,我们详细介绍FreeRTOS的核心组件、内核机制、中断管理和内存管理等内容。
478 0