九、FreeRTOS多任务创建的两种风格及任务启动流程

2023-05-16

文章目录

  • 1、使用FreeRTOS进行多任务创建的时候一般有如下两种风格
    • (1)先创建好所有的任务,最后启动调度器开始多任务的调度
    • (2)先创建一个启动任务后立马开启调度器,然后在启动任务里面创建各种应用,最后启动任务把自己删除
  • 2、FreeRTOS的启动流程
    • (1)使用 xTaskCreate() 函数创建任务
    • (2)使用vTaskStartScheduler()函数开启调度
    • (3)我们在临界区创建任务,所以任务只能在退出临界区后才能执行最高优先级任务

1、使用FreeRTOS进行多任务创建的时候一般有如下两种风格

(1)先创建好所有的任务,最后启动调度器开始多任务的调度

int main (void)
{
	/* 硬件初始化 */
	HardWare_Init(); 

	/* RTOS 系统初始化 */
	RTOS_Init(); 
    taskENTER_CRITICAL(); //进入临界区
    
	/* 创建任务 1,但任务 1 不会执行,因为调度器还没有开启 */
	RTOS_TaskCreate(Task1);
	/* 创建任务 2,但任务 2 不会执行,因为调度器还没有开启 */
	RTOS_TaskCreate(Task2);

	/* ......继续创建各种任务 */
	taskEXIT_CRITICAL(); //退出临界区

	/* 启动 RTOS,开始调度 */
	RTOS_Start(); 
	}

void Task1( void *arg ) 
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

void Task1( void *arg )
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

(2)先创建一个启动任务后立马开启调度器,然后在启动任务里面创建各种应用,最后启动任务把自己删除

int main (void)
{
	/* 硬件初始化 */
	HardWare_Init(); 

	/* RTOS 系统初始化 */
	RTOS_Init(); 

	/* 创建一个任务 */
	RTOS_TaskCreate(AppTaskCreate); 

	/* 启动 RTOS,开始调度 */
	RTOS_Start(); 
}

/* 起始任务,在里面创建任务 */
void AppTaskCreate( void *arg ) 
{
	/* 创建任务 1,然后执行 */
	RTOS_TaskCreate(Task1); 
	taskENTER_CRITICAL(); //进入临界区
 
	/* 当任务 1 阻塞时,继续创建任务 2,然后执行 */
	RTOS_TaskCreate(Task2);
	 
	/* ......继续创建各种任务 */

	/* 当任务创建完成,删除起始任务 */
	RTOS_TaskDelete(AppTaskCreate); 
	taskEXIT_CRITICAL(); //退出临界区
}

void Task1( void *arg ) 
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

void Task2( void *arg ) 
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

2、FreeRTOS的启动流程

(1)使用 xTaskCreate() 函数创建任务

为初始化内存的时候一旦调用创建任务 xTaskCreate()函数,FreeRTOS会自动进行内存的初始化。

(2)使用vTaskStartScheduler()函数开启调度

创建完任务后,我们需要开启调度器。

创建仅仅是把任务添加到系统中,还没真正调度,并且空闲任务也没实现,定时器任务也没实现,这些都是在开启调度函数vTaskStartScheduler()中实现的。

空闲任务不可以被挂起与删除,且其优先级必须是最低的。

空闲任务的优先级与堆栈大小都在 FreeRTOSConfig.h 中由用户定义。

(3)我们在临界区创建任务,所以任务只能在退出临界区后才能执行最高优先级任务

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

九、FreeRTOS多任务创建的两种风格及任务启动流程 的相关文章

  • 深度学习(Deep Learning)

    知识关键点 1 人工智能 深度学习的发展历程 2 深度学习框架 3 神经网络训练方法 4 卷积神经网络 xff0c 卷积核 池化 通道 激活函数 5 循环神经网络 xff0c 长短时记忆 LSTM 门控循环单元 GRU 6 参数初始化方法
  • 基于深度学习的机器人目标识别和跟踪

    如今 xff0c 深度学习算法的发展越来越迅速 xff0c 并且在图像处理以及目标对象识别方面已经得到了较为显著的突破 xff0c 无论是对检测对象的类型判断 xff0c 亦或者对检测对象所处方位的检测 xff0c 深度学习算法都取得了远超
  • 散列表与探测法

    动态查找的时候 如果用查找树同时对俩个变量名 字符串 进行查找 会导致效率不高的问题 引入散列的思想 把字符串变成数字 使得对字符串的比较变成对数字的比较 查找方式时间复杂度顺序查找O n 二分查找 静态查找 O log2N 二叉搜索树O
  • Springboot实现VNC的反向代理

    背景 用户需要通过前端HTML页面的noVNC xff08 noVNC是什么 xff1f xff09 客户端连接底层VNC Server服务端 xff0c 为了防止VNC Server的IP暴露 xff0c 因此需要做一层代理 正常情况下使
  • Visual Studio Code 的C++环境配置和调试

    目录 前言 xff1a 1 为什么要写这篇文章 xff1f 2 为什么选择VS Code xff1f 3 如何联系我 xff1f 简而言之 xff0c VS Code免费 43 快速 43 好用 43 潜力无穷 xff1b 一 安装VS C
  • 浅析向量(Vector),迭代器(Iterator)和数组(Array)

    目录 前言 Foreword 向量 Vector 1 何为向量 xff1f 2 如何初始化Vector向量 xff1f 3 向量的基本操作 xff1a 4 Range based For Statement 5 向量的插入操作 xff1a
  • 《数字电路分析》学习札记

    目录 前言 xff1a Chapter 1 数字逻辑基础 进制 xff1a 进制间转换方法 xff1a BCD xff1a 余3码 xff1a 余3循环码 xff1a 格雷码 xff08 循环码 xff09 xff1a 二进制数 格雷码 x
  • Ubuntu 22.04 双系统安装和卸载

    前言 xff1a 一 为什么选择Ubuntu系统 xff1f 1 免费且提供长期系统维护支持 xff1b 2 是主流的Linux服务器发行版 xff1b 3 强大的Shell xff1b 4 简洁好看的图形化UI界面 xff1b 5 丰富的
  • CSS-Div居中方法(Position方法)

    目录 代码展示 xff1a 实际效果 xff1a 具体分析 xff1a 如何联系我 xff1f 代码展示 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt
  • 字符设备驱动-linux驱动开发第3部分-朱有鹏-专题视频课程

    字符设备驱动 linux驱动开发第3部分 4561人已学习 课程介绍 本课程是linux驱动开发的第3个课程 xff0c 接上部分继续讲解字符设备驱动的开发要点 xff0c 重点是相关的内核源代码的解析和一些真正驱动惯用的编程手法的引入 本
  • C++测试代码运行时间

    如果我们想直观地看出朴素算法和其他算法对程序运行时间的影响 xff0c 那么就可以采取以下方式 方法1 xff1a 基于头文件ctime和函数clock 的实现 代码1 xff1a include lt iostream gt includ
  • VMware虚拟机安装CentOS 7

    目录 1 VMware软件安装 2 CentOS 7 镜像下载 3 VMware安装CentOS 1 安装前内容设置 xff1a 2 安装中操作步骤 3 安装后语言设置 4 将图形化界面切换为命令符界面 如何联系我 xff1f wei ha
  • 解决Windows开机后无启动项的问题

    前言 为什么会出现这个问题 xff1f 此前PC上装有Windows 43 Ubuntu双系统 xff0c 由于又配置了虚拟机下的Centos xff0c 我把Ubuntu系统卸载了 没想到手滑删除了Windows的引导项 如图所示 xff
  • KMP算法图文详解

    简介 xff1a Knuth Morris Pratt xff08 KMP算法or字符串查找算法 xff09 可在一较长串S内查找一子串P出现的位置 xff0c KMP算法利用最长公共前后缀的特性以避免重新检索先前配对的字符串 xff0c
  • 离散数学期末习题

    前言 xff1a 本文适用于应对HUEL离散数学 期末考试 xff0c 重点整理了HUEL离散数学 期末考试范围内的题型 xff0c 既可以应对HUEL离散数学期末考试 xff0c 亦可以作为数据结构与算法的预备知识 如何联系我 xff1f
  • VMware Tools在Centos 7环境的安装教程

    前言 xff1a 阅读本文 xff0c 您可以得到 xff1a VMware Tools在Centos7环境下的安装步骤 xff1b 正文 xff1a VMware Tools在Centos7环境下安装步骤 xff1b 1 您需要保持虚拟机
  • 宝塔面板快速部署SSL证书

    前言 xff1a 发现自己的网站不能使用https访问 xff0c 原来是没有为网站部署SSL证书 通过本文 xff0c 您可以一键免费部署SSL证书 xff08 Let 39 s Encrypt xff09 正文 xff1a 1 如图显示
  • 宝塔面板部署WordPress(保姆式教程)

    前言 xff1a 通过本篇文章 xff0c 您可以掌握 xff1a 1 基于宝塔面板的快速建站操作 xff1b 2 一些浅浅的建站知识与技能 xff1b 3 WordPress助您快速建站 xff0c 节省您的时间 xff1b 如何联系我
  • VS 2022 C++ 自定义头文件示例

    前言 xff1a 博主最近刚从VS Code转到VS 2022 xff0c 但发现自定义的方法和VS Code有些不同 xff0c 故出一期VS 2022自定义头文件的博客 xff0c 时间仓促 xff0c 请不吝赐教 如何联系我 xff1
  • 零基础搭建网站(保姆级教程)

    前言 xff1a 本教程不需要任何前置知识 xff0c 零基础教您搭建网站 如何联系我 xff1f wei haoran 64 outlook com 正文 xff1a 搭建网站需要什么 xff1f 1 域名 xff1b 2 服务器 xff

随机推荐

  • 驱动框架入门之LED-linux驱动开发第4部分-朱有鹏-专题视频课程

    驱动框架入门之LED linux驱动开发第4部分 5199人已学习 课程介绍 本课程是linux驱动开发的第4个课程 xff0c 主要内容是驱动框架的引入 通过led驱动框架和gpiolib的这两个框架的详细解释 xff0c 让大家学习内核
  • VSCode远程连接服务器(SSH免密登录)

    前文 连接远程服务器的方式众多 xff0c 本文将介绍基于VS Code的SSH免密登录方法 在开始SSH远程链接以前 xff0c 您需要完成以下步骤 xff1a 1 Windows配置SSH xff1a 1 以Windows平台为例 xf
  • Linux云服务器防止暴力破解(三道SSH安全策略)

    前言 新购入的服务器 xff0c 往往用户名默认为root xff0c ssh默认开放22端口 xff0c 且配置SSH服务时往往同时允许密码和公钥二重登录 然而 xff0c 许多非法服务器运行着暴力破解程序 xff0c 通过访问用户名ro
  • Git快速入门(图文教程)

    前言 xff1a Git是目前最流行的版本控制工具之一 xff0c 它可以帮助我们更好地管理代码 xff0c 协作开发 xff0c 以及保证代码的安全性 在学习Git之前 xff0c 我们需要先了解几个概念 xff1a workspace
  • VS Code + phpstudy实现PHP环境配置

    概述 xff1a 要使用VSCode进行PHP开发 xff0c 需要先在本地搭建PHP环境 xff0c 并将其配置到VSCode中 下面是具体的步骤 xff1a 1 下载安装PHPStudy 首先 xff0c 我们需要从PHPStudy官网
  • CSS圆角边框

    设置css圆角边框 1 border radius 属性用于向元素添加圆角边框 css圆角边框代码 xff1a border radius 15px 2 对应四个角 xff0c CSS3提供四个单独的属性 xff1a border top
  • CSS渐变色

    渐变 xff1a 通过渐变可以设置一些复杂的背景颜色 xff0c 可以从实现一个颜色向其他颜色过渡的效果 渐变是图片 xff0c 通过 background image设置 CSS 定义了两种渐变类型 xff1a 线性渐变 xff08 向下
  • js的for循环语句

    For循环语法 xff1a for 循环是在您希望创建循环时经常使用的工具 for 循环的语法如下 xff1a for 语句 1 语句 2 语句 3 要执行的代码块 语句 1 在循环 xff08 代码块 xff09 开始之前执行 语句 2
  • 了解 JavaScript 构造函数

    以下是Faraz Kelhini的客座文章 其中一些东西超出了我的舒适区 xff0c 所以我请凯尔辛普森为我进行技术检查 凯尔的回答 xff08 我们在办公时间会议期间所做的 xff09 非常有趣 它是 xff1a 1 xff09 这篇文章
  • JavaScript 字符串加密和解密

    使用CryptoJS 加密和解密 JavaScript 字符串 使用NcryptJS 加密和解密 JavaScript 字符串 使用CryptoJS 加密和解密 JavaScript 字符串 CryptoJS 是一个 JavaScript
  • DOM特效

    第一节 xff1a 模态框拖拽 1 offset 偏移量 offset 翻译过来就是偏移量 xff0c 我们使用 offset系列相关属性可以动态的得到该元素的位置 xff08 偏移 xff09 大小等 offset 可以得到任意样式表中的
  • linux设备驱动模型-linux驱动开发第5部分-朱有鹏-专题视频课程

    linux设备驱动模型 linux驱动开发第5部分 4285人已学习 课程介绍 本课程是linux驱动开发的第5个课程 xff0c 主要内容是linux的设备驱动模型 xff0c 包括总线 类 设备 驱动等概念 xff0c 重点通过plat
  • 工作两三年的人才能体会的软件设计思想

    最近看了几本关于编程的书籍 xff0c 都是些讲解软件架构和设计的书 根据目前脑袋中还残留的记忆 xff0c 相关知识总结如下 xff1a 1 编程范式 目前被提出来的编程范式为 xff1a 结构化编程范式 面向对象编程范式 函数式编程范式
  • es6 的箭头函数

    箭头函数是 ES6 里面一个简写函数的语法方式 重点 xff1a 箭头函数只能简写函数表达式 xff0c 不能简写声明式函数 function fn 不能简写 const fun 61 function 可以简写 const obj 61
  • 使用 JavaScript 绘制圆

    图形是任何 Web 应用程序的重要组成部分 HTML 提供了两种创建图形的方法 xff0c 第一种是 canvas xff0c 另一种是 SVG 在今天的帖子中 xff0c 我们将学习如何使用画布和 JavaScript 在 HTML 中创
  • 闭包和引用

    闭包是 JavaScript 一个非常重要的特性 xff0c 这意味着当前作用域总是能够访问外部作用域中的变量 因为 函数 是 JavaScript 中唯一拥有自身作用域的结构 xff0c 因此闭包的创建依赖于函数 模拟私有变量 span
  • 在 JavaScript 中隐藏表格行

    在 JavaScript 中 xff0c 我们可以在一个通用的类下定义某些表数据 xff0c 该类将具有一些可配合的功能 此特定函数将声明该表的行在选择性触发器上的行为方式 在 JavaScript 中 xff0c 我们可以在一个通用的 类
  • 在jQuery中切换隐藏/显示

    使用jQuery的toggle 方法来切换隐藏 显示 使用jQuery的切换 方法来切换隐藏 显示 在 toggle 方法的用例中 xff0c 我们通常通过 click 事件触发它 同样 xff0c 在该方法的实现中 xff0c 还有另一个
  • 在 JavaScript 中深度克隆对象

    JavaScript 是一种对象语言 几乎所有内容都是 JavaScript 中的对象 布尔值 数字 字符串 日期 数学 Regex 数组 函数和对象本身都是对象 它们是由各种属性和方法组成的键值对的集合 它们直接存储在内存中 xff0c
  • 九、FreeRTOS多任务创建的两种风格及任务启动流程

    文章目录 1 使用FreeRTOS进行多任务创建的时候一般有如下两种风格 xff08 1 xff09 先创建好所有的任务 xff0c 最后启动调度器开始多任务的调度 xff08 2 xff09 先创建一个启动任务后立马开启调度器 xff0c