C 嵌入式系统设计模式 16:循环执行模式

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。

本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之二:循环执行模式。

循环执行模式 (Cyclic Executive Pattern) 是一种 调度模式。在计算机系统中,调度模式指的是对任务、进程或线程进行调度时所采用的一种或多种特定的策略或方法。这些模式旨在优化资源利用率、提高系统性能、确保实时响应等。

循环执行模式在调度多任务时具备的优势是——简单。然而,该模式在应对紧急事件时不够灵活。尽管如此,循环执行模式确保了调度的公平性,使得所有任务都有均等的机会得以运行。虽然从响应性的视角来看,它并非最佳选择,但循环执行模式在可调度性分析方面表现出色,这个模式可以很容易的分析 可调度性

可调度性:如果一个任务集中的所有任务都能按时完成,那么这个任务集就被称为是可调度的。

具体来说,每个任务的截止时间必须大于或等于所有任务在最坏情况下执行时间的总和,再加上循环调度所产生的开销。如果我们假设每个任务的截止时间恰好等于一个完整任务执行周期的时长,那么如下所示的公式给出了任务集中可调度的必要条件:
D i ≥ ∑ j = 1 n C j + K D_{i} ≥ \sum_{j=1}^n C_{j} + K Dij=1nCj+K

其中:

  • Di 是任务 i 的截止时间
  • Cj 是任务 j 的最坏执行时间
  • K 是循环执行的开销,包括任务调用和返回的开销。

摘要

循环执行模式主要应用于两种场景:

  1. 在规模较小的嵌入式应用程序中,该模式能够支持多个任务以伪并发的方式运行,而无需引入复杂的调度程序或实时操作系统(RTOS)所带来的额外开销。
  2. 在高安全性的系统中,由于循环执行模式易于进行认证,因此它在航空电子和飞行管理系统等领域得到了广泛应用。

在循环执行模式中,调度程序采用简单的循环结构,按顺序逐个调用每个任务。每个任务实质上只是调度程序调用的一个函数,该函数在执行完毕后即返回,等待下一次被调用的机会。

问题

许多嵌入式系统是微型应用程序,它们的内存和时间限制非常严格,甚至无法承载即便是经过高度优化的微型内核 RTOS。循环执行模式为实现此目标提供了一种资源较少的方法。

模式结构

模式结构图如下所示:

在这里插入图片描述

循环执行器 包含一个名为 controlLoop() 的函数,该函数的主要职责是循环地调用每个任务线程的 run() 函数。这些 run() 函数都比较简短,一旦开始执行,它们就会一直运行到函数结束。

模式详情

抽象的循环执行线程

通过声明 run() 函数为线程提供了标准接口。循环执行器 将调用这个函数来执行任务。当函数执行完成时,循环执行器将运行列表中的下一个任务。

循环执行器

这个 包含无限循环结构,依次运行各个任务。另外,循环执行器还包含全局堆栈和静态数据,这些数据由任务或调度程序本身所需。

该模式的一种变体是 时间触发的循环执行器 。在这种变体中,循环执行器将设置并使用 循环定时器 来启动任务列表的任务。

循环定时器

循环定时器是可选的。常见的循环执行器并不使用循环定时器。如果使用循环定时器,定时器在到期时可以触发中断。或者更简单地,定时器到期时可以让 hasElapsed() 函数返回 TRUE(非零值)。随后,循环调度器会调用 start() 函数来再次启动循环定时器。

具体的循环执行线程

具体的任务实现,每个任务都有自己的 run() 函数。

效果

这种模式的主要好处是其简单,调度程序很难出错。缺点是,该模式对于高紧急事件明显反应较慢,这使得该模式不适合具有高响应性要求的应用程序。该模式的另一个好处是它在所需资源方面非常轻量级,因此非常适合小内存的设备。

使用循环执行模式的一个主要缺点是线程间的交互变得相对复杂。在这种模式下,如果一个任务需要另一个任务的输出数据,那么必须将这些数据存储在全局变量或共享内存中,以确保相关任务在需要时访问这些数据。

另一方面,由于不存在抢占机制,不受控制的阻塞通常不会发生。由阻塞引起的死锁只能由错误引起,比如一个行为不当的任务,该任务永远不会将控制权返回给循环执行体,从而导致整个系统挂起。

在抢占式调度系统中,即使一个任务失败或行为不当,其他任务通常也能够继续运行,除非该任务禁用了任务切换。然而,在循环执行模式中,一个任务的失败可能会导致整个系统停滞不前,直到问题得到解决。因此,在使用循环执行模式时,需要格外注意任务的设计和同步机制的实现,以确保系统的稳定性和可靠性。

实现策略

这种模式的实现几乎简单得不能再简单。在大多数情况下,循环执行器可能只是系统的 main() 函数和相关的全局数据。在其他情况下,循环执行器可能是一个函数,在 main() 函数中调用。

相关模式

由于该模式的响应性明显不是最优的,因此它经常与一些中断服务例程一起用于处理高紧急事件。将 中断模式循环执行模式 一起使用的另一个用途是使用 时间触发的循环执行器 来实现周期计时器响应。

循环执行模式没有解决任务之间的数据共享问题。循环执行模式虽然定义了可用于数据共享的全局数据结构,但为了达到更好的数据共享效果,可以混合使用其他模式(比如后续文章要讲的 任务协调模式)。由于没有抢占,对全局数据的访问不需要保护。

实例

见原书。






读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉

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

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

相关文章

python实现AES加密解密

1. 前言 AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个。 之前写过一片关于python AES加密解密的文章,但是这里面细节实在很多,这次我从 参数类型、加密模式、编码模式、补全模式、等等方面 系统的说明如何使用AES加密解密…

网络编程day3

1.思维导图 2.TCP机械臂测试 通过:w(红色臂角度增大) s(红色臂角度减小) d(蓝色臂角度增大) a(蓝色臂角度减小) 按键控制机械臂 注意:关闭计算机的杀毒软件,电脑管家,防火墙 1)基于TCP服务器的机械臂,端…

Java智慧云HIS医院信息化系统源码 更具灵活性、扩展性

目录 什么是云HIS 趋势与转变 HIS上云后有哪些好处 解决方案 云HIS组成 1、门诊挂号 2、住院管理 3、电子病历 4、药物管理 5、统计报表 6、综合维护 7、运营运维 什么是云HIS 云HIS是一种基于云计算技术的医院信息管理系统。云HIS可以帮助医院管理各类医院信息&a…

2024年10个超炫酷的前端 3D 开源项目,那几个你用?

本文将分享 10 个超炫酷的前端 3D 开源项目。从令人惊叹的视觉效果到富有创新概念的交互体验,这些项目展示了前端技术的无限可能。无论你是新手还是经验丰富的开发者,都值得一探究竟! 蛋仔派对(three.js版) 利用 Rea…

HotFix原理学习 IL2CPP 学习

原文链接:Unity 游戏用XLua的HotFix实现热更原理揭秘-CSDN博客 本文通过对XLua的HoxFix使用原理的研究揭示出来这样的一套方法。这个方法的 第一步:通过对C#的类与函数设置Hotfix标签。来标识需要支持热更的类和函数。第二步:生成函数连接器…

Node.js基础---Express中间件

1. 概念 1.什么是中间件 中间件(Middleware),特指业务流程的中间处理环节 2. Express 中间件的调用流程 当一个请求到达 Express 的服务器后,可以连续调用多个中间件,从而对这次请求进行预处理 3. Express 中间件格式 Express 的中间件&…

基于ssm游泳会员管理系统+vue论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统游泳会员信息管理难度大,容错率低&#xff0c…

什么是VR虚拟现实|虚拟科技博物馆|VR设备购买

虚拟现实(Virtual Reality,简称VR)是一种通过计算机技术模拟出的一种全新的人机交互方式。它可以通过专门的设备(如头戴式显示器)将用户带入一个计算机生成的虚拟环境之中,使用户能够与这个虚拟环境进行交互…

【Linux实践室】Linux初体验

🌈个人主页:聆风吟 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux 目录结构介绍2.2 🔔Linux …

vue 使用vue-scroller 列表滑动到底部加载更多数据

安装插件 npm install vue-scroller -dmain.js import VueScroller from vue-scroller Vue.use(VueScroller)<template><div class"wrap"><div class"footer"><div class"btn" click"open true">新增</d…

vue2 开发记录

el-select 如何修改选择项的样式/el-select-dropdown__item 文字上下显示 测试代码 <div stylemargin-left: 100px><!-- 测试代码--><el-select filterablesizemini><div classxxx-el-select><el-optionv-foritem in [{key:1,des:2,…

【重温设计模式】装饰模式及其Java示例

装饰模式的介绍 在众多设计模式中&#xff0c;有一种叫做装饰模式&#xff0c;它以一种独特的方式赋予了代码更多的灵活性。 装饰模式是一种结构型设计模式&#xff0c;它允许我们在运行时动态地为对象添加新的行为。这就像是我们在装饰一个房间时&#xff0c;可以随意添加或更…