FreeRTOS动态任务和静态任务创建

news2025/5/17 11:51:08

一.动态任务创建

1.搭建任务框架

去task.c中将任务参数复制到main中

然后将const去掉,它会限制参数类型,任务大小、任务优先级、任务句柄需要去宏定义,任务句柄是指针类型要取地址

    vTaskStartScheduler();   //开启任务调度,.c中1900多行
 

创建了任务函数就要去定义,在task.h定义,在.c中通过动态任务函数跳转到.h中,将vTaskCode复制过去

void vTaskCode( void * pvParameters )
 {
   for( ;; )
  {
      // Task code goes here.
    }
  }
 然后把vTaskCode改成任务名,之后去声明,之后我在函数中写两个任务,这两个任务和之前任务的创建过程一样,这个任务需要删除任务

建立了两个task,就要去写两个task的函数

到此框架就写好了,去写具体任务的内容

2.写具体任务

二.静态任务创建

1.修改宏

ConfigSUPPORT_STATIC_ALLOCATION = 1
有两个函数未定义
1.vApplication Getidle TaskMemory
2.vApplication GetTimer TaskMemory
给空闲任务分配内存
给定时器任务分配内存

去task.c中将任务参数复制到main中

去到定义里面

然后修改,将0改为1,之后编译一下,会报错说有两个东西没有定义,要自己去定义

1.vApplication Getidle TaskMemory        //空闲任务
2.vApplication GetTimer TaskMemory    //定时器任务

Ctrl+f跳出查找窗然后在find in File查分别找vApplication Getidle     vApplication GetTimer,在查找框中去找其声明函数复制到main中

三个空闲任务大小都要定义,推栈一般是一个数组,数组的大小goto到开启任务调度函数vTaskStartScheduler()的定义       

来到定义的地方找到动态函数然后goto到动态中推栈大小的定义处,然后复制蓝色部分,这就是数组的大小

同样的方法定义定时器任务,只不过定时器任务的推栈大小的数组大小不一样

goto到开启任务调度函数vTaskStartScheduler()的定义    找到图中语句去到定义处然后往下找

找到下图中语句去到定义处,就行找到软件定时器推栈大小

2.编写测试代码

开始任务 框架

task1 task2 框架
测试

任务框架创建方法和动态任务一样

写好上没代码,我们要写一个返回值handle

定义一个TaskHandle_t StartTask_Handle;然后写一下代码,TaskHandle_t 规定的

void start_task( void * pvParameters )  这个函数在task.h中300多行,start_task是我们上面给任务的名字,这个函数写完要在顶部声明图二

然后在开始任务中创建任务,过程与开始创建任务一样,到此就完成了静态任务的创建

三.两者的运用场景和区别

  在 FreeRTOS 中,静态任务和动态任务有着不同的特点,适用于不同的应用场景,下面为你详细分析它们各自适合的情况。

  静态任务适用情况

    对内存使用可预测性要求高的场景 - **原因**:静态任务的任务控制块(TCB)和任务堆栈所需的内存是在编译时就分配好的,通常是全局变量或者静态变量,存放在静态存储区。这使得开发者在设计阶段就能准确知道系统的内存占用情况,不会在运行时出现内存使用量不可控的情况。 - **示例**:在一些航空航天、医疗设备等对安全性和稳定性要求极高的嵌入式系统中,需要精确地规划内存使用,以避免因内存分配失败或内存碎片问题导致系统故障。例如,一个心脏起搏器的嵌入式系统,它的任务数量和每个任务所需的内存是固定的,使用静态任务可以确保系统在长时间运行过程中内存使用的稳定性。

内存资源有限且固定的场景 

静态任务不会产生内存碎片,因为它们的内存分配和释放模式是固定的。在内存资源有限的系统中,内存碎片可能会导致后续的内存分配失败,即使系统看起来还有足够的空闲内存。 - **示例**:一些低成本的微控制器,如 8 位或 16 位单片机,其内存资源非常有限。在这样的系统中开发程序时,使用静态任务可以更有效地利用有限的内存资源,避免因内存碎片问题而影响系统的正常运行。

对实时性要求极高的场景

由于静态任务的内存分配和调度行为在编译时就已经确定,系统的运行时间和行为具有较高的可预测性。这对于实时系统来说非常重要,因为实时系统需要在规定的时间内完成任务,任何不可预测的内存分配或调度延迟都可能导致系统错过任务截止时间。 - **示例**:工业自动化中的机器人控制系统,需要对机器人的运动进行精确控制,每个任务都有严格的时间要求。使用静态任务可以确保任务按照预定的时间顺序执行,提高系统的实时性能。

 动态任务适用情况

    任务数量或内存需求动态变化的场景 - **原因**:动态任务可以在程序运行过程中根据实际需求动态地创建和删除任务,并且系统会自动管理任务所需的内存分配和释放。这使得系统能够根据不同的运行情况灵活调整任务数量和内存使用。 - **示例**:在一个智能家居系统中,用户可能会随时添加或移除智能设备。每个智能设备可能对应一个或多个任务,系统需要根据设备的连接和断开情况动态地创建或删除相应的任务。使用动态任务可以方便地实现这种功能,而不需要在编译时预先分配大量的内存来应对可能出现的所有任务。 

程序功能扩展性强的场景 

当程序需要不断添加新功能或模块时,动态任务可以方便地集成这些新功能。开发者可以在不修改原有代码结构的情况下,动态创建新的任务来实现新的功能。 - **示例**:一个多功能的智能手表应用程序,可能会随着软件的更新不断添加新的功能,如运动监测、睡眠分析、消息提醒等。每个新功能都可以通过动态创建一个或多个任务来实现,而不需要对原有的任务进行大规模的修改。 

开发和调试阶段 

在开发和调试过程中,开发者可能需要频繁地修改任务的数量、优先级和功能。动态任务的创建和删除更加灵活,方便开发者进行实验和测试。 - **示例**:在一个新的嵌入式项目开发初期,开发者可能需要不断尝试不同的任务设计和调度策略。使用动态任务可以快速地创建和删除任务,观察系统的运行情况,从而更快地找到最优的设计方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306929.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT:Graphics View的坐标系介绍

在 Qt 的 Graphics View 框架中,存在三种不同的坐标系,分别是 物品坐标系(Item Coordinates)、场景坐标系(Scene Coordinates) 和 视图坐标系(View Coordinates)。这三种坐标系在图形…

C# httpclient 和 Flurl.Http 的测试

关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站,可以测试Post调用,我写了2个函数,测试httpclient和Flurl使用Post: async 和 await 是成对使用的,为了接受web异步返回的数据,winfor…

精选案例展 | 智己汽车—全栈可观测驱动智能化运营与成本优化

本案例为“观测先锋 2024 可观测平台创新应用案例大赛”精选案例,同时荣获IT168“2024技术卓越奖评选-年度创新解决方案”奖。 项目背景 近年来,中国汽车行业进入转型升级阶段,智能网联技术成为行业发展的核心。车联网、自动驾驶等技术的加速…

阿里云可观测全面拥抱 OpenTelemetry 社区

作者:古琦 在云计算、微服务、容器化等技术重塑 IT 架构的今天,系统复杂度呈指数级增长。在此背景下,开源可观测性技术已从辅助工具演变为现代 IT 系统的"数字神经系统",为企业提供故障预警、性能优化和成本治理的全方…

山大软院ai导论实验之采用BP神经网络分类MNIST数据集

目录 实验代码 实验内容 实验代码 import matplotlib.pyplot as plt from matplotlib import font_manager import torch from torch.utils.data import DataLoader import torchvision from torchvision import transforms# 数据预处理 transform transforms.Compose([tra…

threeJs+vue 轻松切换几何体贴图

嗨,我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下,手头上正好有个在线3D家具商店,用户不仅可以看到产品的静态图片,还能实时更换沙发的颜色或材质,获得真实的购物体验。…

【python】01_写在前面的话

又是爆肝干文的日子,继上次说要出一期Python新手入门教程系列文章后,就在不停地整理和码字,终于是把【基础入门】这一块给写出来了。 不积跬步无以至千里,不积小流无以成江海,一个一个板块的知识积累,早晚你…

跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)

飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案: 一、背景痛点与解决方案 在技术文档创作中,数学公式的跨平台渲染一直存在三大痛点: 飞书云文档:原生KaTeX渲染与导出功能存在语法限制微软Word:Math…

深入理解 并查集LRUCaChe

并查集&LRUCaChe 个人主页:顾漂亮 文章专栏:Java数据结构 1.并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后根据一定规律将归于同一组元素的…

最新版本SpringAI接入DeepSeek大模型,并集成Mybatis

当时集成这个环境依赖冲突&#xff0c;搞了好久&#xff0c;分享一下依赖配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

滑动验证组件-微信小程序

微信小程序-滑动验证组件&#xff0c;直接引用就可以了&#xff0c;效果如下&#xff1a; 组件参数&#xff1a; 1.enable-close&#xff1a;是否允许关闭&#xff0c;默认true 2.bind:onsuccess&#xff1a;验证后回调方法 引用方式&#xff1a; <verification wx:if&qu…

IDEA配置JSP环境

首先下载IDEA2021.3&#xff0c;因为最新版本不能简单配置web开发环境。然后新建一个java开发项目&#xff1a; 然后右键创建的项目&#xff0c;添加web框架&#xff1a; 选择web appliciation 在web inf文件夹下创建classes和lib文件夹&#xff1a; 点击file &#xff0c;选择…

Idea 中 Project Structure简介

在 IntelliJ IDEA 中&#xff0c;Project Structure&#xff08;项目结构&#xff09;对话框是一个非常重要的配置界面&#xff0c;它允许你对项目的各个方面进行详细的设置和管理。下面将详细介绍 Project Structure 中各个主要部分的功能和用途。 1. Project&#xff08;项…

旁挂负载分担组网场景

旁挂负载分担组网场景&#xff08;到路由策略&#xff09; 1.拓扑 2.需求 使用传统三层架构中MSTPVRRP组网形式VLAN 2—>W3,SW4作为备份 VLAN 3—>SW4,SW3作为备份 MSTP设计—>SW3、4、5运行 实例1:VLAN 2 实例2:VLAN 3 3.配置 交换层 SW3配置 抢占延时&#xff…

网络安全防御模型

目录 6.1 网络防御概述 一、网络防御的意义 二、被动防御技术和主动防御技术 三、网络安全 纵深防御体系 四、主要防御技术 6.2 防火墙基础 一、防火墙的基本概念 二、防火墙的位置 1.防火墙的物理位置 2.防火墙的逻辑位置 3. 防火墙的不足 三、防火墙技术类型 四…

Qt 开源音视频框架模块之QtAV播放器实践

Qt 开源音视频框架模块QtAV播放器实践 1 摘要 QtAV是一个基于Qt的多媒体框架&#xff0c;旨在简化音视频播放和处理。它是一个跨平台的库&#xff0c;支持多种音视频格式&#xff0c;并提供了一个简单易用的API来集成音视频功能。QtAV的设计目标是为Qt应用程序提供强大的音视…

uake 网络安全 reverse网络安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文首发于“合天网安实验室” 首先从PEID的算法分析插件来介绍&#xff0c;要知道不管是在CTF竞赛的REVERSE题目中&#xff0c;还是在实际的商业产品中&#xf…

vue实现根据点击或滑动展示对应高亮

页面需求&#xff1a; 点击左侧版本号&#xff0c;右侧展示对应版本内容并置于顶部右侧某一内容滚动到顶部时&#xff0c;左侧需要展示高亮 实现效果&#xff1a; 实现代码&#xff1a; <template><div><div class"historyBox pd-20 bg-white">…

Magma:多模态 AI 智体的基础模型

25年2月来自微软研究、马里兰大学、Wisconsin大学、韩国 KAIST 和西雅图华盛顿大学的论文“Magma: A Foundation Model for Multimodal AI Agents”。 Magma 是一个基础模型&#xff0c;可在数字和物理世界中服务于多模态 AI 智体任务。Magma 是视觉-语言 (VL) 模型的重要扩展…

02_linux系统命令

一、绝对路径与相对路径 1.以 ./ 开始的路径名是相对路径 2.以 / 开始的路径是绝对路径. 相对路径:会随着用户当前所在的目录发生改变. 绝对路径:不会根据用户所在的路径而改变. 3.gcc 编译器 编译器把高级语言(C语言/JAVA语言/C语言)生成二进制代码的一种工具.gcc 是专用…