C 嵌入式系统设计模式 29:受保护的单通道模式

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

本系列描述我对书中内容的理解。本文章描述嵌入式安全性和可靠性模式之六:受保护的单通道模式。

受保护单通道模式 (Protected Single Channel Pattern) 是对通道模式的一种简化扩展,在该模式中,在一个或多个 具体的数据转换 阶段添加了数据检查机制。它提供了轻量级的冗余保护,但通常情况下,一旦检测到故障,就不能继续提供服务。

摘要

受保护单通道模式 通过单一通道处理一系列操作,包括从传感获器取数据、数据转换以及执行器驱动等。该模式通过在通道的关键点增加检查机制来增强系统的安全性和可靠性,而这可能需要额外的硬件支持。由于只有一个通道,当出现持续性故障时,该模式将无法继续正常运行,但它可以检测到瞬态故障并有可能对其进行处理。

问题

冗余设计的成本不仅体现在开发工作的复杂度上,同时也涉及硬件冗余带来的额外支出。在某些情况下,完全冗余的通道可能并非必需。例如,如果系统有一个已知的故障安全状态 (在这个状态下能保证系统必然是安全的),那么系统只需要有能力检测到故障并转入该状态即可。这样做虽然降低了系统的可靠性级别,但可能仍能满足用户的实际需求。

模式结构

模式结构图如下所示:
在这里插入图片描述

与上文 通道模式 的模式结构图相比,这里所做的只是在某些转换步骤中添加了一些检查。实际上,这些检查不必在单独的类中实现,也可以直接在 具体转换类 内部实现。这些检查可以是任何形式的检查,例如:

  • 范围检查(数据是否在所需的范围内?)
  • 合理性检查(数据是否处于当前情境下的预期范围内?)
  • 一致性检查(数据值是否与其他同时计算的数据值保持一致?)
  • 反向转换检查(能否从输出值重新计算得到输入值?)
  • 数据有效性检查,就像我们在之前的 反码模式 和 循环冗余校验模式 中看到的那样。

模式详情

传感器驱动

从一个或多个传感器获取物理数据,并将其放入通道进行处理。

抽象的数据转换

这是一个概念性示意图。在面向对象的语言或实现中,可以使用真正的泛化(即继承)机制,但在 C 语言中,更多的是作为一个概念性想法来表述意图,而非直接指导实现细节。此类有两个可选 关联

  • 自身关联:即列表中的下一个转换步骤。这表示有一系列数据转换步骤,前一个转换的输出是下一个转换的输入。
  • 输出执行器驱动关联:直接指向输出设备驱动。

此外,抽象的数据转换类 还有一个可选的关联类:抽象的转换检查类。在数据转换链中有必要进行检查的地方,会使用这个类。这意味着在数据处理过程中,可在特定转换点插入检查机制,确保数据的正确性和合理性。

抽象的转换检查

抽象的数据转换 类似,这是一个概念性示意图,是一个泛化机制。代表一种能够检查当前状态中处理过程或数据有效性的元素。

具体的数据转换

此类负责对输入的数据值(来自传感器或前一个 具体的数据转换类 )执行数学变换,并生成输出结果(发送给序列中的下一个 具体的数据转换类或者 执行器驱动)。在简单情况下,可能只需要单一的 具体的数据转换类,但在更为复杂的应用场景中,可能存在多个不同的具体数据转换类。每一个具体的数据转换类都会对数据进行特定的处理和转换,从而构成整个数据处理通道的核心部分,确保数据在传输过程中逐步转化成适合执行器驱动设备所需的形式,最终驱动物理动作或控制设备行为。

在数据转换链中,某些特定的 具体的数据转换类 构成了检查点,即会在这些点检查数据转换的有效性。对于这些情况,会与特定 具体的转换检查类 进行关联。

关联:UML 中的 关联 表示类与类之间的连接,关联关系使一个类知道另外一个类的属性和方法。这里 具体的数据转换类 知道 具体的转换检查类 的函数(即:check() 函数),转换类对象调用检查类提供的方法来检查数据的合法性。

具体的转换检查

这是一个特定的数据 转换检查类,其作用是在转换链中的某一特定节点上核查数据转换是否有效。

执行器驱动

这个类利用计算出的输出值来驱动一个或多个执行器,例如电动机、灯光或加热装置等。

效果

一般来说,使用 受保护的单通道模式 具体有以下优点:

  1. 故障识别:提供了清晰的方法来检测和定位数据处理过程中的故障。通过在转换链中设置检查点,能够及时发现并隔离问题。
  2. 容错:可以在检测到故障后转至安全状态,在发生错误时能够维持系统的健壮性。

采用这种模式也有其固有的缺点:

  1. 资源消耗增加:额外的内存(包括代码空间和数据存储)、计算时间以及硬件需求,这些都取决于对通道的具体利用程度。
  2. 复杂性上升:随着数据通道内元素数量和类型的增长,管理及协调各个转换步骤、转换检查的复杂性也随之提高。

实现策略

该模式可以通过真正的泛化实现,但在 C 语言等编程环境中,通常会将 抽象的数据转换 视为某种 具体的数据转换 类的占位符;

数据流经通道的方式主要有两种主要策略:

  1. 串行处理:最简单的方法是对获取的一个数据元进行一系列的转换,并在获取下一个数据元之前将其输出到执行器(actuator)。在这种情况下,数据按照顺序逐个经过各个转换阶段。
  2. 并行处理:而在更高带宽的应用场景中,同一时间可能有多个数据实例存在于通道内,对于每一个转换阶段都有一个对应的数据实例。这样,数据从一个转换传递到下一个转换的同时,所有其他的数据实例也都在同步进行传递。这意味着多个数据可以同时在不同的转换环节被处理,提高了系统的吞吐量和实时性。

此外,数据检查也可以直接嵌入到某些转换步骤中,而不是作为一个独立的类来实现。

相关模式

这个模式提供了一种中等到大规模的冗余机制,它是基于之前章节讨论过的 通道模式 发展而来的众多模式之一。在作者的另一部著作《Real-Time Design Patterns: Robust Scalable Architecture for Real-Time Systems》中,深入探讨了多种此类设计模式。

该模式中的 数据转换检查 可以通过其他基础模式来实现,例如早先提及的 反码模式 和 循环冗余校验模式 。

实例

见原书。






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

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

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

相关文章

Appium UI 自动化到底要不要用 Page Object 模式?(深入了解 PO 模式, 并改造 PO 模式)

Page Object 模式 python webdriver 版本 这里介绍下我近期对 PO 模式的理解, 整体思想是分层,让不同层去做不同类型的事情,让代码结构清晰,增加复用性 一般分两层或三层(也有四层的): 两层: …

移动硬盘放久了会不会坏?移动硬盘长期不用数据会丢失吗

随着数字化时代的到来,移动硬盘已成为我们生活中不可或缺的一部分,用于存储和备份大量的照片、视频、文档等重要数据。然而,当移动硬盘长时间不使用或被放置一旁时,我们不禁会产生疑问:它会坏掉吗?存储在里…

H5 自适应超人背景引导页源码

源码名称:自适应超人背景引导页源码 源码介绍:一款自适应引导页源码,带超人背景。有四个跳转按钮。 需求环境:H5 下载地址: https://www.changyouzuhao.cn/11608.html

《互联网的世界》第七讲-能源

本想聊聊 tcp 和 quic,但这些都属于术的范畴,变化多端,等孩子们长大了又不知变成什么样子了,趁这段时间在家,还是得讲一些相对不变的东西,或法或势。 从 安阳卖血糕的精巧篦子 想到如何做圆米粉和圆面条&a…

ubuntu下摩尔线程s80配置ai绘图环境

首先我的桌面是gdm,然后安装github上的sdk,重启进不去桌面了 解决方法: 开机以后选ubuntu的高级选项,换旧一点的linux内核,然后卡在进程上,ctrlaltf2斤tty sudo apt remove musa 卸载完驱动就可以进系统了

PLC通信网关的介绍-天拓四方

在工业自动化日益发展的今天,PLC已成为工业控制领域的核心设备。工业自动化与信息化深度融合,PLC的应用日益广泛。PLC通信网关,作为工业物联网的重要组成部分,扮演着连接PLC与云平台的桥梁角色,实现设备间的数据交换与…

pgsql常用索引简写

文章来源:互联网博客文章,后续有时间再来细化整理。 在数据库查询中,合理的使用索引,可以极大提升数据库查询效率,充分利用系统资源。这个随着数据量的增加得到提升,越大越明显,也和业务线有关…

Java中的LinkedBlockingQueue:原理、应用与性能深入剖析

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在当今这个多线程、高并发的时代,Java的并发编程显得尤为重要。而当我们提及Java的并发编程,不可不提的一…

性能压测-jstack的使用

Jstack命令使用 使用top命令查看cpu占用比较高的进程pidps H -eo pid,tid,%cpu|grep 71 (71为进程数pid,tid为线程数) 此命令答应 进程数为71 下所有的线程数,看哪个线程数占用的cpu较高 Jstack中线程数记录的是16进制,需要将步…

ipa文件证书监测有什么用?测试安装包有什么用?什么类型包需要要求资质?

哈喽大家好,我是咕噜签名分发可爱多。今天给大家介绍一下ipa文件证书监测有什么用,测试安装包有什么用,以及什么类型包需要要求资质。 IPA 文件证书监测主要用于验证和确认一个 iOS 应用程序是否具有合法的签名证书。下面是一些监测证书的用途…

SaaS应用加速:提高企业办公效率,解决业务挑战

随着企业业务的迅猛发展,为满足业务需求,企业纷纷投入更多SaaS应用以提高办公效率。然而,随着企业应用数量和用户数的不断增加,经常会遇到SaaS应用访问速度受限的问题。在这种情况下,SaaS应用加速解决方案受到越来越多…

1.Spring核心功能梳理

概述 本篇旨在整体的梳理一下Spring的核心功能,让我们对Spring的整体印象更加具体深刻,为接下来的Spring学习打下基础。 本片主体内容如下: Bean的生命周期依赖注入的实现Bean初始化原理推断构造方法原理AOP的实现这里要说明一下,我们这里说到的Spring,一般指的是Spring F…