嵌入式系统的特点分类发展与应用

嵌入式软件架构设计意图通常伴随着基于个人经验的假设。 软件开发人员可以从资源受限的基于微控制器的系统的角度来看待架构设计。 系统人员可能会从应用程序处理器的角度来考虑架构。 如何设计架构将取决于系统的嵌入式软件分类。

我们可以通过多种不同的方式对嵌入式软件进行分类。 我发现嵌入式软件有五种简单的分类,可以帮助我调整观点,以更好地理解手头的系统。

让我们探索 5 个简单的嵌入式软件类别,您需要了解这些软件才能成功地进行通信和设计系统。

01.嵌入式软件分类-BAREMETAL

裸机嵌入式系统利用独立于操作系统的软件架构。 通常,裸机架构将是事件驱动的,严重依赖状态机,和/或使用非常简单的协作任务调度。 开发人员需要非常了解底层处理器,因为没有操作系统可以抽象出底层细节。

您通常会在资源受限的设备(例如 8 位、16 位和某些 32 位微控制器)上找到裸机软件设计。 然而,资源可用性并不是裸机系统的限制。 您可以设计裸机架构并为任何嵌入式处理器实现它。 不幸的是,处理器越复杂,实现就越复杂。

对于功能有限、使用资源受限的微控制器、严格的实时要求以及对可扩展性要求最低的产品,建议使用裸机架构和实施。

02.嵌入式软件分类——实时操作系统(RTOS)

使用实时操作系统的嵌入式软件架构在过去几年中急剧增加。 基于 RTOS 的嵌入式系统通常比裸机架构具有更复杂的时序要求。 RTOS 抽象了任务调度等低级细节,同时还为开发人员提供了用于任务同步(信号量和标志)、数据保护(互斥体)和通信(队列)的工具。

您通常会在 32 位微控制器和小型应用处理器上找到 RTOS 软件设计。 尽管您可能会在 16 位处理器上找到它们,但 RTOS 通常需要至少 24 KB 闪存和 32 KB RAM 才能有效使用。 这些要求对 RTOS 的有效使用设置了较低的限制。

RTOS 可能会增加设计的额外复杂性,主要是在使用抢占式任务调度时。 如果设计者不小心,可能会导致线程饥饿、创建优先级反转,甚至死锁。 然而,与裸机系统相比,RTOS 可以让您快速扩展系统、提高可维护性并收集更复杂的系统性能。

对于具有复杂时序要求、使用现代微控制器、受益于多任务处理以及需要扩展或重用应用程序部分的产品,建议使用基于 RTOS 的架构和实现。

03.嵌入式软件分类——“通用”操作系统

当使用足够复杂的处理器(例如应用处理器)时,嵌入式软件架构可以利用整个操作系统。 例如,嵌入式Linux可以被认为是一个完整的操作系统。 我不将 RTOS 归为此类,因为 RTOS 与嵌入式 Linux 不同,是一种专用的、资源受限的操作系统。 设计人员可以像开发桌面或移动应用程序一样完全访问库和操作系统资源。

您通常会在 Raspberry Pi 等 32 位应用处理器上找到这种操作系统软件设计。 然而,这些处理器非常复杂,需要操作系统来管理其所有资源。 现在,这并不意味着您不能使用裸机或使用 RTOS;而是意味着您不能使用裸机或使用 RTOS。 这只是意味着复杂性和开发时间急剧增加。

完整的操作系统消除了开发人员的内存限制负担。 此外,您通常可以让非嵌入式软件人员参与其中。 对于构建在操作系统之上的应用程序,软件开发涉及的专业知识要少得多。

对于没有严格实时要求、使用现代微处理器、受益于高级抽象以及需要扩展或重用部分应用程序的产品,建议使用完整的操作系统架构和实现。

04.嵌入式软件分类——容器/微服务

微服务和容器是云、移动和桌面计算中常见的设计类型。 然而,它们正在迅速进入嵌入式系统。 我将两者放在一起,因为它们使用相似的架构设计策略,尽管底层技术不同。

微服务

微服务将应用程序构建为一组松散耦合的服务,这些服务可独立部署且易于维护(如果做得好)。 微服务将应用程序构建为为业务领域开发的小型自治服务的集合。 微服务提供具有特定功能的松散耦合服务。

资源相对有限的嵌入式系统(例如微控制器)可以运行微服务。 但是,它们通常至少需要与运行 RTOS 所需的内存量相同的内存量。 微服务包括服务本身、入站和出站消息队列以及日志和状态信息。

对编排器和运行时环境的需求增加了微服务设计的复杂性,您必须小心使用的资源并仔细监控系统的实时响应。 然而,微服务可以提供非常可扩展的系统,易于现场维护和更新。

我建议在需要实时更新、可扩展性和现代敏捷流程并从分布式模型中受益的应用程序中使用微服务。

容器

容器是一种可以托管微服务的实现范例。 每个容器都是一个独立的沙箱,可以运行一个或多个微服务。 容器通常是独立的且易于维护。 一系列容器为更广泛的应用程序奠定了基础。 同样,容器和微服务也密切相关。 容器为微服务的运行提供了额外的隔离层。

至少需要一个现代的微控制器才能利用容器。 每个技术供应商都略有不同,但有些供应商声称能够使用与 RTOS 一样少的内存。 然而,我调查过的大多数目标 IoT 应用程序都需要大约 256 KB 的闪存。

容器是一种现代架构实现,可以为嵌入式应用程序增加灵活性、可扩展性和可移植性。 多年来,它们已成功应用于其他软件领域。 到目前为止,最大的限制是尺寸和性能。

我建议将容器用于需要现场更新、可扩展性、额外安全性和现代敏捷流程的应用程序。

8e1831bc-d074-11ed-bfe3-dac502259ad0.png/

图 1 – 容器架构堆

05.嵌入式软件分类——混合系统

混合系统同时利用多种分类。 例如,您可能有一个使用嵌入式 Linux 的应用程序处理器。 然而,处理器可能有一个内置的微控制器,使用裸机方法来管理实时响应。

混合系统允许开发人员利用多种设计方法从多种系统类型中受益。 如果不仔细管理系统设计的各个部分之间的交互,这种灵活性通常会增加系统的复杂性。

对于具有复杂处理和实时要求的产品,建议使用混合架构和实现,这些产品使用多核处理器,受益于高级抽象并需要扩展或重用应用程序的某些部分。

06. 结论

嵌入式软件系统可以分为几种类型。 嵌入式软件的设计和构建方式取决于您选择的分类。 每个分类将规定您用于构建和实现系统的设计模式和工具。 在设计或讨论系统时,请在继续设计之前指定系统的类型。