4.5 KiB
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_t8位整数类型
mr_int16_t 16位整数类型
mr_int32_t 32位整数类型
- 无符号整型:
mr_uint8_t8位无符号整数类型
mr_uint16_t 16位无符号整数类型
mr_uint32_t 32位无符号整数类型
- 浮点
mr_float单精度浮点类型
mr_double 双精度浮点类型
扩展类型:
- 基础类型:
mr_base_t32位整数类型 - 无符号基础类型:
mr_ubase_t32位无符号整数类型 - 数量类型:
mr_size_t32位无符号整数类型 - 布尔类型:
mr_bool_t8位无符号整数类型 - 错误类型:
mr_err_t32位整数类型 - 偏移类型:
mr_off_t32位整数类型 - 操作锁类型:
mr_lock_t8位无符号整数类型
宏
基础宏:
- 空:
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 | 应用初始化,用户业务应用初始化 |