FreeRTOS的并行与并发思考

FreeRTOS的任务触发是由滴答时钟触发SysTick中断来触发调度器执行或阻塞或挂起和切换任务的。

首先是任务的并发能力,FreeRTOS的任务执行是基于全抢占调度机制,任务优先级按在就绪列表中由高到低排布,系统首先执行最高优先级任务,如果最高优先级在while(1)中,最高优先级任务将永远执行。要想分配CPU资源给其他任务,可以用 vTaskDelay 来暂时将高优先级任务挂起。此时下一个高优先级任务就会抢占CPU资源,开始执行任务,delay时间过后,高优先级重新抢占CPU,恢复执行。

全抢占调度机制比较适用于实时控制,对响应时间要求严格,因为延迟可能导致系统性能下降或安全问题。比如说智能车,电机控制方面,优先级肯定是最高的,但是像camera的数据采集就可以在电机控制之下,智能车在运行的时候,camera采集数据不需要极其的频繁,再往下比如LCD图像显示,就更不需要那么频繁的显示,即便有延迟,对系统安全也不会产生多大的影响。这种设置可以确保电机控制任务的实时性和响应性,同时允许相机数据采集和LCD图像显示任务在不影响关键功能的情况下进行适当的延迟。

接下来是任务的并行能力,时间片轮转调度机制是任务的并行机制,也就是当多个任务处于同一优先级时,CPU通过划分时间片,每个时间片执行任务,任务没有执行完,就将数据或寄存器配置等暂存到CPU的堆栈上,等待其他任务全部执行完对应的时间片,再次恢复到任务被执行的点。
时间片轮转调度机制其实最好的应用法是对于某些任务,需要等待某个事件,或者需要等待什么资源的时候,为了不白白空等,就先去执行其他的任务,等到其他任务执行完了,我这个任务也等到了想要的资源。

比如camera的数据采集和数据处理与分析,可以在同一个优先级,也就是数据该采集采集,等camera数据采集完了我就执行数据分析,之后camera依旧在不同的时间片进行数据采集,采集完的数据在不同的时间片进行分析。(但是这也要注意一些问题,如果数据采集任务在一个时间片内没有完成数据的采集,而数据处理与分析任务在下一个时间片内开始执行,可能会导致数据丢失。因为数据采集任务没有机会在连续的时间片内完成采集,而数据处理与分析任务已经开始处理下一次采集的数据。以及如果数据处理与分析任务占用的执行时间较长,可能会导致相机数据采集任务无法及时响应。这可能会导致数据采集的延迟增加,影响实时性能。此时可能用高低优先级全抢占调度机制实现camera的数据采集和数据处理与分析更稳一点)

时间片轮转调度机制一般用于没有紧急的实时需求情况下,比如智能车需要通过多个传感器(如相机、雷达、激光等)获取环境信息,并进行实时的感知和决策。这几个任务完全可以利用时间片轮转调度机制获取信息吗。

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

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

相关文章

Django web开发(一) - 前端

文章目录 前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和span2.5 超链接2.6 图片小结标签的嵌套2.7 列表2.8 表格2.9 input系列2.10 下拉框2.11 多行文本用户注册案例: 用户注册GET 方式POST 方式表单数据提交优化 3.CSS样式3.1 快速上手3.2 CSS应用方式1. 在…

Docker run 命令

docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明: -a stdin:指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项; -d:后台运行容器&am…

SAP-部分字段变更

在SAP中部分字段是可以自行调整的,例如下图 这个字段是客户组1,已经被改成一级经理,现在来操作改回客户组1 首先选择字段点击F1-技术信息-数据元素(双击) . . 保存,返回,激活,返…

redis运维(十八)pipeline

一 pipeline 流水线 说明: 这里讲解的不是jenkins的pipeline流水线这里pipeline: 管道 redis为什么要提供pipeline功能 事务和pipeline ① pipeline的理念 强调:单纯的pipeline跟事务没有关系redis-cli --pipe --> 使用了pipeline机制说明&a…

排序算法总结

1 排序算法 1.1 快速排序 1.1.1 算法思想 先取一个随机数,然后和数组的最后一个数交换 进行partition过程,也就是比数组最后一个数小的放在数组左边,大的放在右边,相等的在数组中间,最后把数组的最后一个数也要放到中…

【LeetCode刷题-回溯】-- 46.全排列

46.全排列 方法:回溯法 一种通过探索所有可能的候选解来找出所有的解的算法,如果候选解被确认不是一个解,回溯法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试 使用一个标记数组表示已经填过的数 class Solution {pu…

【前端】yarn介绍和使用

yarn介绍和使用 一、什么是yarn?二、安装yarn三、yarn用法四、yarn更多用法 一、什么是yarn? yarn是快速、可靠、安全的依赖管理。 yarn官网:https://yarn.nodejs.cn/ Yarn 是代码的包管理器。 它允许你与世界各地的其他开发者使用和共享&am…

如何设置实现本地JumpServer远程访问管理界面

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…

C语言for循环结构经典练习

文章目录 一、for循环基本知识二、经典例题及解析1.水仙花数2.求规定范围内的完数3.求规定范围内质数4.计算阶乘之和5.计算55555555555555(类型)6.计算112123123412345(类型)7.判断用户输入正整数的位数8.判断某正整数是否为回文数9.九九乘法表10.统计用户输入的字符中&#xf…

PTA 公路村村通

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N)&…

JVM 之 javac、java、javap 命令详解

目录 一. 前言 二. javac 命令 三. java 命令 四. javap 命令 一. 前言 在日常工作中,我们新建 Java工程,写好代码后,编译和运行几乎都是通过 IDE(如idea、eclipse)工具完成。但作为 Java开发者还是要了解下 Java虚…

Modbus RTU协议及modbus库函数使用

一、与Modbus TCP的区别 在一般工业场景使用modbus RTU的场景还是更多一些,modbus RTU基于串行协议进行收发数据,包括RS232/485等工业总线协议。 与modbus TCP不同的是RTU没有报文头MBAP字段,但是在尾部增加了两个CRC检验字节(CRC…

Android之在RecyclerView列表中实现单选

一、实现效果 单选、可取消选中、列表数据可更新(选择状态清空,可重新选择) RecyclerView列表单选 二、实现步骤 仅展示部分核心代码,请主要参考适配器的定义 1、Item布局 selected_tip_list_item.xml文件 包含一个TextView和…

Spring Boot集成MyBatis实现多数据源访问的“秘密”

文章目录 为什么需要多数据源?Spring Boot集成MyBatis的基础配置使用多数据源小结 🎉Spring Boot集成MyBatis实现多数据源访问的“秘密” ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏&…

力扣:178. 分数排名(Python3)

题目: 表: Scores ---------------------- | Column Name | Type | ---------------------- | id | int | | score | decimal | ---------------------- 在 SQL 中,id 是该表的主键。 该表的每一行都包含了一场比赛的分数。Score …

TCP /UDP协议的 socket 调用的过程

在传输层有两个主流的协议 TCP 和 UDP,socket 程序设计也是主要操作这两个协议。这两个协议的区别是什么呢?通常的答案是下面这样的。 TCP 是面向连接的,UDP 是面向无连接的。TCP 提供可靠交付,无差错、不丢失、不重复、并且按序…

Selenium介绍及基本使用方法

Selenium是一个开源、免费、简单、灵活,对Web浏览器支持良好的自动化测试工具,在UI自动化、爬虫等场景下是十分实用的,能够熟练掌握并使用Selenium工具可以大大的提高效率。 Selenium简介 Selenium支持多平台、多浏览器、多语言去实现自动化…

深入理解强化学习——马尔可夫决策过程:动作价值函数

分类目录:《深入理解强化学习》总目录 不同于马尔可夫奖励过程,在马尔可夫决策过程中,由于动作的存在,我们额外定义一个动作价值函数(Action-value Function)。我们用 Q π ( s , a ) Q^\pi(s, a) Qπ(s,a)…

线程提交线程到线程池,有几种方式,哪一种方式是工作中不能使用的,无法捕捉异常,线程池的拒绝策略,线程池的提交方式

线程池的工作原理 JDK中提交线程到线程池,有几种方式,哪一种方式是工作中不能使用的,无法捕捉异常 两种提交任务的方法 ExecutorService 提供了两种提交任务的方法: execute():提交不需要返回值的任务 submit()&a…