外观
10.系统模块管理的设计
约 816 字大约 3 分钟
嵌入式Linux单片机个人
2022-06-18
二十一、系统模块管理的设计
1. 系统模块化设计
- 将系统中有关联的部分组合在一起,构成具有特定功能的子系统
- 模块的内部组成具有较强的耦合性,模块本身具有一定通用性
- 不同的模块间可以进行相互组合与依赖,进而构成不同的产品
2. 模块化设计

3. 模块化设计示例

- 各个模块间需要相互依赖,进而完成产品功能
- 根据依赖关系能够将模块分为不同的层

4. 模块间的分层
硬件层,系统层,平台层,框架层,应用层

5. 模块的分级(更细的设计粒度)
同一层中的模块根据依赖关系能够继续分级

6. 分层与分级的意义
- 模块间的依赖关系决定了初始化的前后顺序
- 被依赖的模块必须先初始化(底层先于上层初始化)
- 如:
- 硬件层模块先于系统层模块初始化
- 框架层模块先于应用层模块初始化
- 如:
7. 系统架构示例一

8. 系统架构示例二

9. 设计时需要思考的问题
- 如何在代码中定义模块?
- 如何定义的层级关系(依赖关系)?
- 如何确定模块的初始化顺序?
10. 模块的定义

11. 模块的描述及组织方式

12. 层级关系的定义

13. 状态设计

14. 模块的初始化

15. 模块的销毁

16. 实现要点
- 每一个模块对应一个ID和一个结构体变量( module_init_t )
- 模块需要注册后才能被初始化( module_register )
- 模块提供一个回调函数( module_callback_t )用于接收事件
- 所有的模块根据层级关系组织于不同链表中
- 同一个链表中的模块没有依赖关系
- 整个系统从最底层(最上层)的模块开始进行初始化(销毁)
17. 实例分析:模块的组织,初始化与销毁
源码分析

module.c module.h 管理模块
Dll.c Dll.h 双向链表
Primitive.h 定义类型

18. 小结
- 模块设计是要遵从强内聚弱耦合的原则
- 模块之间可以相互依赖,并进行模块层级的划分
- 模块管理是为了系统中各个模块的有序启动和停止
- 模块设计时需要考虑资源的分配和释放问题
