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.mfbz.cn/a/419584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mybatis-plus逆向自动生成代码总结记录

使用mybatis-plus&#xff08;mp&#xff09;自动生成各个层的代码&#xff0c;减轻开发工作&#xff0c;不过现在用mybatis-flex的越来越多,综合性能更好。 1.pom文件简要 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boo…

初学Vue总结

0 Vue概述 问题&#xff1a;我们已经学过了htmlCssjavascript,可以开发前端页面了&#xff0c;但会发现&#xff0c;效率太低了。那么&#xff0c;有没有什么工具可以提高我们的开发效率&#xff0c;加快开发速度呢&#xff1f; 他来了&#xff0c;他来了&#xff0c;他大佬似…

光耦合器在电路板上的作用

在不断创新的电子世界中&#xff0c;一个关键组件在确保电子设备无缝运行方面默默地发挥着至关重要的作用&#xff1a;光耦合器。光耦合器经常被普通消费者忽视&#xff0c;它是电路板上的无名英雄&#xff0c;在维护电子系统的完整性和安全性方面发挥着关键作用。 什么是光耦合…

ventoy制作启动U盘

Ventoy新一代多系统启动U盘解决方案。国产开源U盘启动制作工具&#xff0c;支持Legacy BIOS和UEFI模式&#xff0c;理论上几乎支持任何ISO镜像文件&#xff0c;支持加载多个不同类型的ISO文件启动&#xff0c;无需反复地格式化U盘。把ISO系统文件拷贝到U盘&#xff0c;U盘插入电…

Springboot 3.0

一、Springboot3.0介绍 1.1、 Springboot3.0概述 在2022 年 11 月 24 日Spring Boot 3.0 现已正式发布&#xff0c;它包含了 12 个月以来 151 个开发者的 5700 多次代码提交。这是自 4.5 年前发布 2.0 以来&#xff0c;Spring Boot 的第一次重大修订。 它也是第一个支持 Spr…

化是渐化,变是顿变:一窥 OpenAI Sora 相关技术的演进

编者按&#xff1a; 近期&#xff0c;OpenAI 发布通用视觉大模型 Sora &#xff0c;这也是继文本模型ChatGPT和图片模型Dall-E之后&#xff0c;又一极具颠覆性的大模型产品&#xff0c;人们重新思考了生成式 AI 在视觉内容创作领域的应用前景&#xff0c;内容创作工作流有望被颠…

ETH网络中的区块链

回顾BTC网络的区块链系统 什么是区块链&#xff1f;BTC网络是如何运行的&#xff1f;BTC交易模式 - UXTO ETH网络中的区块链 ETH网络的基石依旧是 区块链。上面 什么是区块链&#xff1f; 的文章依旧适用。 相比BTC网络&#xff0c;ETH网络的账户系统就相对复杂&#xff0c;所…

【论文阅读-PRIVGUARD】Day4:3节

3 PRIVANALYZER&#xff1a;强制执行隐私政策的静态分析 本节介绍PRIVANALYZER&#xff0c;这是一个用于强制执行由PRIVGUARD追踪的隐私政策的静态分析器**。我们首先回顾LEGALEASE政策语言&#xff0c;我们使用它来正式编码政策&#xff0c;然后描述如何静态地强制执行它们**…

储能:第十四届中国国际储能展览会在杭州国际博览中心召开

数字储能网讯&#xff1a;由中国化学与物理电源行业协会主办&#xff0c;中国化学与物理电源行业协会储能应用分会和中国储能网联合承办的第十四届中国国际储能大会暨展览会将于2024年3月10-12日在杭州国际博览中心召开&#xff0c;大会主题为“共建储能生态链&#xff0c;共创…

Java毕业设计-基于springboot开发的农机设备电招平台系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台功能模块2.1管理员功能模块2.2 农机机主功能模块2.3 使用者功能模块 四、毕设内容和源代码获取总结 Java毕业…

从理论到落地,大模型评测体系综合指南

1956年夏&#xff0c;“人工智能” 这一概念被提出。距今已有近70年的发展历史。中国科学院将其划分为六个阶段&#xff1a;起步发展期&#xff08;1956年—1960s&#xff09;&#xff0c;反思发展期&#xff08;1960s-1970s&#xff09;,应用发展期&#xff08;1970s-1980s),低…

数据库 与 数据仓库

OLTP 与 OLAP OLTP(On Line Transaction Processing&#xff0c;联机事务处理) 系统主要针对具体业务在数据库联机下的日常操作&#xff0c;适合对少数记录进行查询、修改&#xff0c;例如财务管理系统、ERP系统、交易管理系统等。该类系统侧重于基本的、日常的事务处理&#…

CentOS 7开启Web服务

之前有写过用kali开启web服务方法&#xff0c;这次写个用cendos7开启服务的步骤&#xff01; 1、安装httpd yum install -y httpd 若显示安装失败&#xff0c;报错原因为找不到httpd的安装包&#xff0c;可参考这篇文件更新yum源&#xff1a;CentOS 7更换yum源|详细步骤-CSDN…

(每日持续更新)jdk api之PipedInputStream基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

双通道 40V 160mΩ车规级高侧电源开关带诊断功能反向电池保护功能

概述 PC8916是双通道、高功率具有集成NMOS功率FET的开关&#xff0c;以及电荷泵。该设备集成了高级 保护功能&#xff0c;例如负载电流限制&#xff0c;通过功率限制进行过载主动管理带可配置闭锁的超温停机。全面诊断和高精度电流感应这些功能实现了对负载的智能控制。有源漏…

零售经营“新赛道” ——基于手机银行APP专区调研的客群精细化运营分析报告

随着银行业竞争的不断深入及新客户增量日渐“到顶”&#xff0c;各家银行的客群竞争逐渐由“跑马圈地”进入“精耕细作”的新阶段&#xff0c;在客群精准化服务方面不断深入。目前&#xff0c;国内主要商业银行均已在手机银行上建立了相应的用户专区&#xff08;或对应版本APP&…

敏捷开发模型:一种灵活、协作和持续的软件开发方法

敏捷开发模型&#xff1a;一种灵活、协作和持续的软件开发方法 引言 在软件开发领域&#xff0c;随着市场需求的不断变化和技术的迅速发展&#xff0c;传统的瀑布模型逐渐暴露出其局限性。为了应对这些挑战&#xff0c;敏捷开发模型应运而生。敏捷开发模型强调灵活、协作和持…

EasyRecovery2024免费无需付费版电脑数据恢复软件

一、功能概述 EasyRecovery数据恢复软件是一个功能全面的数据恢复工具&#xff0c;其主要功能包括&#xff1a; 文件恢复&#xff1a;能够恢复各种文件类型&#xff0c;如文档、图片、视频、音频等&#xff0c;满足用户多样化的数据恢复需求。分区恢复&#xff1a;当硬盘分区…

Bert-as-service 实战

参考&#xff1a;bert-as-service 详细使用指南写给初学者-CSDN博客 GitHub - ymcui/Chinese-BERT-wwm: Pre-Training with Whole Word Masking for Chinese BERT&#xff08;中文BERT-wwm系列模型&#xff09; 下载&#xff1a;https://storage.googleapis.com/bert_models/…

推荐一个屏幕上鼠标高亮显示的小工具

在视频录制等特定场景下&#xff0c;很多人希望在点击鼠标时能够在屏幕上及时进行显示&#xff0c;便于别人发现&#xff0c;提高别人的注意力。 因此&#xff0c;很多录屏软件中都内含显示鼠标点击功能。那如果不支持该怎么办呢&#xff1f;其实&#xff0c;也是可以通过其他工…
最新文章