# 模块篇(sp_mod) ## 初始化 通过**配置组件**中的配置信息,生成模块和实体对象 ## Entity与 mod 的关系 * 一个 **mod** 可以对应多个 **Entity**,在 GUIConsole 窗口看到的所有条目都是实体的概念,包括状态也是实体的状态 * **epid**: 模块在从配置中读取时的实际序号(sp_cfg_shell_module_t::idx),暂且扩写为 **entity parent id** * **mod** 是一个进程,**entity** 必须在 **mod** 加载后才能进行创建。 ## 实体可订阅事件 * 生命周期 * 创建 * 关闭 * 异常 * 状态转换 * 实体状态 ## 模块的启动来源(进程建立) * **app::on_req**: * **CSpShellConsole::StartEntity**: ## 实体状态 * 停止实体 * 前提:BUSY | IDLE | Pause * 暂停实体 * 前提:BUSY|IDLE * 继续实体 * 前提:PAUSE * 握手实体 * 前提: IDLE|BUSY|PAUSE 卸载模块与终止模块的区别在于:后者先杀死模块进程,然后将所属实体置为kill状态,而前者要判断一下当前的模块中的实体状态,如果有处于正常运行状态的,则不作任何操作 ## 主要关联代码 ``` kickoff_startlist()::app.cpp load_module()::sp_mod create_module_process()::sp_mod ``` ## 依赖关系 * 对于实体,依赖服务组件,用于调用操作实体的处理函数(**sp_mod_entity_stub_t**) * 对于sp_mod_mgr_t,依赖服务组件,用于调用实体状态变动的函数(**mgr_on_pkt**) *