本节主要学习以下内容:
1,任务创建和删除的API函数(熟悉)
2,任务创建和删除(动态方法)(掌握)
3,任务创建和删除(静态方法)(掌握)
4,课堂总结(掌握)
一、任务创建和删除的API函数(熟悉)
任务的创建和删除本质就是调用FreeRTOS的API函数
API函数 | 描述 |
xTaskCreate() | 动态方式创建任务 |
xTaskCreateStatic() | 静态方式创建任务 |
vTaskDelete() | 删除任务 |
- 动态创建任务:任务的任务控制块以及任务的栈空间所需的内存,均由FreeRTOS从FreeRTOS管理的堆中分配
- 静态创建任务:任务的任务控制块以及任务的栈空间所需的内存,需要用户分配提供
1.1 动态创建任务函数
configMAX_TASK_NAME_LEN 默认为16
pvParameters, 传递给任务函数的参数 ,默认为NULL
uxPriority, 任务优先级,范围:0 ~ configMAX_PRIORITIES - 1 configMAX_PRIORITIES 为32
返回值 | 描述 |
pdPASS | 任务创建成功 |
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY | 任务创建失败 |
任务控制块的堆空间不足。
1.2 实现动态创建任务流程
此函数创建的任务会立刻进入就绪态,由任务调度器调度运行,在就绪态中找到优先级最高的任务去执行。
扩展:任务控制块究竟是什么?通俗来讲就是任务的身份证,保留了任务的一些特征。下面为任务控制块结构体成员的简介:
任务栈栈顶,在任务切换时的任务上下文保存、任务恢复息息相关,注意:每个任务都有属于自己的任务控制块,类似身份证。
1.3 静态创建任务函数
返回值 | 描述 |
NULL | 用户没有提供相应的内存,任务创建失败 |
其他值 | 任务句柄,任务创建成功 |
1.4 静态创建任务使用流程
此函数创建的任务会立刻进入就绪态,由任务调度器调度运行
1.5 任务删除函数
形参 | 描述 |
xTaskToDelete | 待删除任务的任务句柄 |
用于删除已被创建的任务,被删除的任务将从就绪态任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除
注意:
- 1、当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)
- 2、空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存, 则需要由用户在任务被删除前提前释放,否则将导致内存泄露
1.6 删除任务流程
二、任务创建和删除(动态方法)(掌握)
1、实验目的:学会 xTaskCreate( ) 和 vTaskDelete( ) 的使用
2、实验设计:将设计四个任务:start_task、task1、task2、task3
四个任务的功能如下:
- start_task:用来创建其他的三个任务,只执行一次,执行结束后调用vTaskDelete将自己删除
- task1:实现LED0每500ms闪烁一次
- task2:实现LED1每500ms闪烁一次
- task3:判断按键KEY0是否按下,按下则删掉task1
代码明天上传
麻烦各位一键三连