当前位置: 首页 > news >正文

FreeRTOS—动态创建与删除任务实战;静态创建与删除任务实战

文章目录

  • 一、动态创建任务
    • 1.1.实验设计
    • 1.2.软件设计

一、动态创建任务

1.1.实验设计

创建四个任务,任务名字分别是 start_task、task1、task2、task3:

  1. start_task:用来创建其他三个任务
  2. task1:实现 LED0 每500ms闪烁一次
  3. task2:实现 LED1 每500ms闪烁一次
  4. task3:判断按键 KEY0 是否按下,按下则删除 task1

1.2.软件设计

以下代码设计在 freertos_demo.c 文件里实现:

  1. 首先在 FreeRTOSConfig.h 文件,将宏configSUPPORT_DYNAMIC_ALLOCATION配置为1,支持动态申请内存
  2. 定义入口函数参数,并在上面声明该函数、进行堆栈大小和任务优先级的宏定义,记得在主函数里面调用freertos_demo( );,以下代码实现:
//start_task的任务配置
#define START_TASK_PRIO           1
#define START_TASK_STACK_SIZE     128
TaskHandle_t start_task_handler;
void start_task(void *pvParameters);void freertos_demo(void)
{xTaskCreate((TaskFunction_t)    start_task,(char*)             "start_task",(uint16_t)          START_TASK_STACK_SIZE,(void*)             NULL,(UBaseType_t)       START_TASK_PRIO,(TaskHandle_t*)     &start_task_handler);vTaskStartScheduler();  		//开启任务调度器
}
  1. 声明每个任务的配置包括:任务句柄、任务优先级、堆栈大小、创建任务
//task1的任务配置
#define TASK1_PRIO           1
#define TASK1_STACK_SIZE     128
TaskHandle_t task1_handler;
void task1(void *pvParameters);//task2的任务配置
#define TASK2_PRIO           1
#define TASK2_STACK_SIZE     128
TaskHandle_t task2_handler;
void task2(void *pvParameters);//task3的任务配置
#define TASK3_PRIO           1
#define TASK3_STACK_SIZE     128
TaskHandle_t task3_handler;
void task3(void *pvParameters);
  1. 编写任务函数
//编写start_task的任务函数,它的里面又定义task1、task2、task3
void start_task(void *pvParameters)
{taskENTER_CRITICAL();           //进入临界区,为什么要进入临界区//因为在定义入口函数参数的时候开启了任务调度器,当任务调度器开启的时候,任务立刻创建,立刻与第一个任务进行优先级比较,优先级的作用在开始的时候就发挥不出来,所以需要进去临界区,等待全部任务创建完成,就进行调度,优先级高的先进性xTaskCreate((TaskFunction_t)    task1,(char*)             "task1",(uint16_t)          TASK1_STACK_SIZE,(void*)             NULL,(UBaseType_t)       TASK1_PRIO,(TaskHandle_t*)     &task1_handler);xTaskCreate((TaskFunction_t)    task2,(char*)             "task2",(uint16_t)          TASK2_STACK_SIZE,(void*)             NULL,(UBaseType_t)       TASK2_PRIO,(TaskHandle_t*)     &task2_handler);xTaskCreate((TaskFunction_t)    task3,(char*)             "task3",(uint16_t)          TASK3_STACK_SIZE,(void*)             NULL,(UBaseType_t)       TASK3_PRIO,(TaskHandle_t*)     &task3_handler);vTaskDelete(start_task_handler);//删除start_task任务,释放空间	taskEXIT_CRITICAL();            //退出临界区
}
http://www.dtcms.com/a/275399.html

相关文章:

  • ubuntu18.04 升级Ubuntu 20.04
  • 外设数据到昇腾310推理卡 之一
  • Linux进程管理的核心:task_struct中的双链表与网状数据结构
  • 【攻防实战】记一次DC2攻防实战
  • 【Linux仓库】虚拟地址空间【进程·陆】
  • DVWA靶场通关笔记-XSS DOM(Low级别)
  • 力扣-19. 删除链表的倒数第N个节点
  • 前端内容-ES6
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • 虚拟现实的镜廊:当技术成为存在之茧
  • AI之DL之VisualizationTool:ai-by-hand-excel的简介、安装和使用方法、案例应用之详细攻略
  • 生成式对抗网络(GAN)模型原理概述
  • 用 Python 将分组文本转为 Excel:以四级词汇为例的实战解析
  • Socket到底是什么(简单来说)
  • HTTP和HTTPS部分知识点
  • w460实习生管理系统
  • Linux中Gitee的使用
  • 【小沐杂货铺】基于Three.JS绘制汽车展示Car(WebGL、vue、react、autoshow、提供全部源代码)
  • vue3 el-table动态表头
  • vite如何生成gzip,并在服务器上如何设置开启
  • tp8.0\jwt接口安全验证
  • Ubuntu快速搭建QT开发环境指南,5000字解析!!
  • 自动化证书续签工具针对VPS服务器HTTPS服务的维护实践
  • windows电脑远程win系统服务器上的wsl2
  • 企业选择大带宽服务器租用的原因有哪些?
  • 北京企业纷纷“借兵”:揭秘软件人力外包走俏的四大真相
  • 9. JVM垃圾回收
  • 持有对象-基本概念
  • 多 Agent 强化学习实践指南(一):CTDE PPO 在合作捕食者-猎物游戏中的应用详解
  • 检查输入有效性(指针是否为NULL)和检查字符串长度是否为0