component_entity_module.md 1.5 KB

模块篇(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