一、系统模块化设计
将系统中有关联的部分放在一起,构成具有功能的子系统
模块内部有较强的耦合性,模块本事具有一定的通用性
不同的模块之间可以进行相互组合和依赖,进一步构成不同的产品
模块间的分层
- 在架构设计阶段采用分层的概念
- 硬件层,系统层,平台层,框架层,应用层
分层与分级的意义
- 模块之间的依赖关系决定了初始化的先后顺序
- 被依赖的模块必须先初始化(底层优先于上层初始化)
- 如:
- 硬件层优先于系统层模块初始化
- 框架层优先于系统层初始化
模块的分级
- 在编码阶段采用分级的概念
- 分级的粒度比分级要更细
问题:
- 如何在代码中定义模块?
- 如何定义层次关系?
- 如何确定模块的初始化顺序?
二、模块的定义
定义模块的ID:
typedef enum
{
MODULE_INTERRUPT,
MODULE_TIMER,
MODULE_CONSOLE
}module_t;
模块的描述和组织方式:
typedef struct
{
struct dual_link_list_node node;// 双向链表节点
const char *name; // 模块名称
module_call_back_t callback; // 回调函数,用于接收系统消息
bool is_registered; // 标记模块是否被注册
}module_init_t;
层级关系的定义
typedef enum
{
LEVEL_FIRST,
PLATFORM_LEVEL0,
PLATFORM_LEVEL1,
PLATFORM_LEVEL2,
FRAMEWORK_LEVEL0,
FRAMEWORK_LEVEL1,
FRAMEWORK_LEVEL2,
APPLICATION_LEVEL0,
APPLICATION_LEVEL1,
APPLICATION_LEVEL2,
LEVEL_COUNT,
LEVEL_LAST = (LEVEL_COUNT - 1)
}module_level_t;
模块状态设计
typedef enum
{
STATE_INITIALIZE, // 初始化
STATE_UP, // 系统启动
STATE_DOWN, // 系统关闭
STATE_DESTORY // 销毁
}module_state_t;
三、模块的管理
模块的销毁过程:
总结:
- 每一个模块对应一个ID和一个结构体变量(module_init_t)
- 模块需要先注册后才能初始化(module_register)
- 模块提供一个回调函数(module_callback_t)用于接收事件
- 所有的模块根据层级关系组织在不同的链表中
- 同一个链表中的模块之间没有依赖关系
- 整个系统从最底层的模块开始进行初始化