Bruce Powel Douglass大师介绍-CSDN博客https://blog.csdn.net/ChatCoding/article/details/134665868
嵌入式软件开发从小工到专家-CSDN博客https://blog.csdn.net/ChatCoding/article/details/135297955
C嵌入式编程设计模式源码-CSDN博客https://blog.csdn.net/ChatCoding/article/details/134819019
静态分配模式只适用于负载(内存量)高度可预测且稳定的简单系统。在适用的情况下,使用这种模式可以使系统易于设计和维护。
动态内存分配在实时嵌入式系统中存在两个主要问题:
这种模式采用了一种非常简单的方法来解决这两个问题:禁止动态内存分配。这意味着所有对象都在系统初始化期间分配。如果设计时能够知道内存负载,并且能够为最坏情况分配足够的内存,那么系统虽然初始化时间会长一点,但运行时将更加稳定高效。
动态内存分配在结构化和面向对象设计中非常普遍。例如,C++ 语言使用 new
和 delete
来分配和释放内存,C 语言则使用 malloc
和 free
。在这些语言中,程序员都需要显式执行这些操作,但也很难想象任何大型程序不使用分配内存的指针。而 Java 语言更加彻底,所有对象都存放在动态内存中,这意味着所有对象创建都隐式地使用了动态内存分配。此外,Java 还会在内存不再使用时自动释放它,但具体何时何地发生则不在程序员的控制范围内。
尽管很常见,动态内存分配始终是让实时系统开发疼痛的问题,主要有以下三个难题:
上述三个难题都可能导致实时系统出现严重的性能问题或甚至崩溃。因此,在实时系统中,应尽量避免使用动态内存分配。
图 6-1 展示了该模式的基本结构。它结构非常简单,但可以通过嵌套抽象层来处理任意大小的系统。系统对象启动初始化过程,并创建最高级别的复合对象。这些复合对象通过组合关系连接到其他复合对象或原始对象。原始对象被定义为不会动态创建其他对象的类。使用组合关系是因为它们清晰地标识了创建/删除的责任。
分配计划
分配计划(Allocation Plan)是可选的,用于指定最大系统复合对象的分配顺序。如果没有分配计划,则系统可以按任何所需的顺序分配对象。
复合对象
复合对象(Composite Object)是指与其他对象之间存在组合关系的对象,其他对象可以是复合对象或原始对象。复合对象负责通过组合创建它所拥有的所有对象。复合对象和系统对象都不能释放内存。
复合对象可以由其他复合对象组成,但每个通过组合关系拥有的对象只能属于一个复合对象。这意味着模式中清楚地标识了系统中每个对象的创建责任。
部件对象
部件对象(Part Object)是复合对象和原始对象的父类。它允许系统对象和复合对象通过组合包含复合对象和原始对象。
原始对象
原始对象(Primitive Object)是指不负责分配任何其他对象的类。所有原始对象由复合对象创建。
系统对象
系统对象(System Object)是系统中最高抽象层级的对象。它的职责是通过创建和初始化系统的主要部分(最高级别的复合对象)来“启动”系统。这些复合对象又会创建自己的部分,依此类推。一旦所有对象都创建完毕,系统对象就会通过运行 begin
操作启动系统执行。
静态分配模式将所有对象都在系统启动时进行内存分配,适用于以下情况:
使用静态分配模式的系统拥有以下优势:
然而,静态分配模式也存在一定的缺点:
总结: 静态分配模式适用于最坏情况可预测、内存负载稳定、规模较小且对内存成本不敏感的系统。它能带来更快的运行速度、更可预测的执行和无碎片化等优势,但需要付出启动时间较长和潜在内存浪费的代价。
这个模式非常容易实现。在许多情况下,甚至不需要单独的初始化方法,可以直接使用每个复合对象的构造函数来完成对象的创建和初始化。
本章中介绍的其他模式也解决了类似的问题,但会带来略有不同的利弊。例如,池分配模式、固定大小缓冲区模式、垃圾回收器模式和垃圾压缩器模式等等。
图6-2展示了一个使用完全构建系统实例的简单例子。图6-2a展示了对象图的实例结构,图6-2b展示了静态分配模式在启动时的工作方式。
总结来说,静态分配模式通过在系统启动时分配所有对象,避免了动态内存分配带来的时间不确定性和内存碎片化问题。这种模式适用于内存负载可预测、系统设计简单且内存成本不是主要考虑因素的情况。在实施时,需要在设计阶段对内存需求有准确的预测,以确保在最坏情况下有足够的内存。
图形中各个箭头的含义
图形中各个对象的含义
起搏子系统(Pacing Subsystem):起搏器的核心,负责生成电脉冲来刺激心肌。它由起搏电路、起搏电极和起搏电容器组成。
- 起搏电路(Pacing Circuit):生成电脉冲。
- 起搏电极(Pacing Electrode):将脉冲传递给心肌。
- 起搏电容器(Pacing Capacitor):为起搏电路存储能量。