Files
mr-library/document/kernel.md
2023-02-20 23:51:02 +08:00

4.5 KiB
Raw Blame History

mr-library

内核

mr-library 基于面向对象思想的内核框架设计。该框架中,所有的对象都基于 mr_object 对象派生而来,具有一些共同的属性和操作。对象被组织成容器的形式,并被注册到对应类型的容器中。内核在启动时会维护多个容器,包括 无类型驱动 等。通过查询对象类型和名称,从对应容器中获取到对象,进行管理和操作。

容器

mr-library 框架中,容器由 名称类型链表 组成。名称 用于对容器进行介绍和检索,也可用于为对象添加前缀名。类型 则是对容器的定义,不同类别的对象经过分类后被注册到对应的容器中。链表 是容器的链接方式,对象则是通过链表放入容器中。

struct mr_container
{
  char                   *name;
  enum mr_container_type type;
  struct mr_list         list;
};

对象

mr-library 框架中,容器由 名称状态链表 组成。名称 是对象名,也是容器查找等操作所依托的基础。状态 则保存有该对象的状态,主动操作或错误调用等情况发生时,状态也会随之改变。链表 则是对象的链接方式,当对象被注册到容器后,该对象将被加入到对应容器的链表中。

struct mr_object
{
  char            *name;
  mr_err_t        state;
  struct mr_list  list;
};

类型

所有的类型命都以 mr 开头然后是 类型 最后以 _t 结尾。

基础类型:

  • 整型: mr_int8_t 8位整数类型

mr_int16_t 16位整数类型

mr_int32_t 32位整数类型

  • 无符号整型: mr_uint8_t 8位无符号整数类型

mr_uint16_t 16位无符号整数类型

mr_uint32_t 32位无符号整数类型

  • 浮点 mr_float 单精度浮点类型

mr_double 双精度浮点类型

扩展类型:

  • 基础类型: mr_base_t 32位整数类型
  • 无符号基础类型: mr_ubase_t 32位无符号整数类型
  • 数量类型: mr_size_t 32位无符号整数类型
  • 布尔类型: mr_bool_t 8位无符号整数类型
  • 错误类型: mr_err_t 32位整数类型
  • 偏移类型: mr_off_t 32位整数类型
  • 操作锁类型: mr_lock_t 8位无符号整数类型

基础宏:

  • 空: MR_NULL
  • 布尔: MR_TRUE

MR_FALSE

  • 级别: MR_HIGH

MR_LOW

  • 操作锁: MR_LOCK

MR_UNLOCK

  • 使能: MR_ENABLE

MR_DISABLE

故障宏:

故障码 故障 级别
MR_ERR_OK 0 无故障
MR_ERR_GENERIC 1 常规故障 较危险的故障,可能导致崩溃
MR_ERR_OVERFLOW 2 溢出故障 非常危险的故障,系统可能出现未知错误
MR_ERR_NOMEM 3 无内存 警告类型的故障,系统已无可用内存资源
MR_ERR_IO 4 IO故障 警告类型的故障系统调用IO接口故障
MR_ERR_INVALID 5 无效参数 警告类型的故障,功能可能无法实现
MR_ERR_TIMEOUT 6 超时 提示类型的故障,系统调用超时
MR_ERR_BUSY 7 忙碌 提示类型的故障,系统忙碌
MR_ERR_NOT_FOUND 8 未找到 提示类型的故障,系统为找到操作对象
MR_ERR_UNSUPPORTED 9 不支持操作 提示类型的故障,操作对象不支持此操作

命令宏:

mr-library 内置命令类型为 mr_uint16_t 。系统基础命令占用 4字节中最高1字节(0xf000) 。剩余3字节为扩展命令为其余框架和用户服务。

命令码 命令
MR_CMD_NULL 0x0000 空命令
MR_CMD_CONFIG 0x1000 配置命令
MR_CMD_SET_PARAM 0x2000 设置参数命令
MR_CMD_SET_RX_CALLBACK 0x3000 设置接收回调函数命令
MR_CMD_SET_TX_CALLBACK 0x4000 设置发送回调函数命令
MR_CMD_ATTACH 0x5000 挂载总线命令
MR_CMD_TRANSFER 0x6000 传输命令

自动初始化

mr-library 支持自动初始化,通过将初始化函数通过自动初始化导出,即可在启动时自动调用初始化函数。

注意:自动初始化仅支持指定格式函数 int (*init_fn_t)(void);

初始化顺序 类别
INIT_BOARD_EXPORT 1 板级初始化,硬件底层初始化
INIT_DEVICE_EXPORT 2 驱动初始化,驱动层初始化
INIT_ENV_EXPORT 3 环境初始化,环境框架初始化
INIT_APP_EXPORT 4 应用初始化,用户业务应用初始化