mem_monitor
mem_monitor 提供内存监控功能,支持对指定地址段的读写访问进行监控和中断回调通知。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_mem_monitor_init | 初始化MEM_Monitor模块 |
| uapi_mem_monitor_deinit | 去初始化MEM_Monitor模块 |
| uapi_mem_monitor_enable | 使能指定的MEM_Monitor监控器 |
| uapi_mem_monitor_disable | 去使能指定的MEM_Monitor监控器 |
| uapi_mem_monitor_set_section | 设置MEM_Monitor监控地址段及工作模式 |
Functions
uapi_mem_monitor_init
头文件清单
功能说明
- 初始化MEM_Monitor模块,注册HAL函数并注册中断处理
- 完成模块初始化后,方可调用其他MEM_Monitor接口
前置条件
- 调用时序约束:MEM_Monitor模块尚未初始化
- 调用上下文约束:需在主线程调用,禁止在中断上下文中调用
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 初始化成功 |
| Other | 其他错误码,参考errcode_t | HAL层初始化失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_MEM_MONITOR | 编译参与宏 | 控制mem_monitor模块参与编译 | n |
uapi_mem_monitor_deinit
头文件清单
功能说明
- 去初始化MEM_Monitor模块,注销中断并注销HAL函数
- 调用后所有MEM_Monitor监控器将停止工作
- 释放中断资源,需与init配对调用
前置条件
- 调用时序约束:MEM_Monitor模块已通过uapi_mem_monitor_init()初始化完成
- 调用上下文约束:需在主线程调用,禁止在中断上下文中调用
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_MEM_MONITOR | 编译参与宏 | 控制mem_monitor模块参与编译 | n |
uapi_mem_monitor_enable
头文件清单
功能说明
- 使能指定的MEM_Monitor监控器,开启时钟并使能监控功能
- 注册中断回调函数,当监控地址段被访问时触发回调
- monitor参数超出有效范围时函数直接返回,不执行任何操作
前置条件
- 调用时序约束:MEM_Monitor模块已通过uapi_mem_monitor_init()初始化完成
- 调用上下文约束:需在主线程调用,禁止在中断上下文中调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| monitor | mem_monitor_t | MEM_Monitor监控器索引 | MEM_MONITOR_NUM_0(0) / MEM_MONITOR_NUM_1(1) / MEM_MONITOR_NUM_2(2) / MEM_MONITOR_NUM_3(3) / MEM_MONITOR_NUM_4(4) / MEM_MONITOR_NUM_5(5) / MEM_MONITOR_NUM_6(6) |
| callback | uapi_mem_monitor_callback_t | 中断回调函数,在监控地址段被访问时由中断处理函数调用,参数addr为触发访问的地址,参数id为读写模式及访问的总线id | 非NULL |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_MEM_MONITOR | 编译参与宏 | 控制mem_monitor模块参与编译 | n |
uapi_mem_monitor_disable
头文件清单
功能说明
- 去使能指定的MEM_Monitor监控器,关闭监控功能并关闭时钟
- 调用后该监控器不再触发访问中断
- monitor参数超出有效范围时函数直接返回,不执行任何操作
前置条件
- 调用时序约束:MEM_Monitor模块已通过uapi_mem_monitor_init()初始化完成
- 调用上下文约束:需在主线程调用,禁止在中断上下文中调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| monitor | mem_monitor_t | MEM_Monitor监控器索引 | MEM_MONITOR_NUM_0(0) / MEM_MONITOR_NUM_1(1) / MEM_MONITOR_NUM_2(2) / MEM_MONITOR_NUM_3(3) / MEM_MONITOR_NUM_4(4) / MEM_MONITOR_NUM_5(5) / MEM_MONITOR_NUM_6(6) |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_MEM_MONITOR | 编译参与宏 | 控制mem_monitor模块参与编译 | n |
uapi_mem_monitor_set_section
头文件清单
功能说明
- 设置指定MEM_Monitor监控器的监控地址段及工作模式
- 配置监控的起始地址、结束地址、地址段编号和读写监控模式
- 地址段设置失败时返回ERRCODE_MEM_MONITOR_INVALID_PARAMETER
前置条件
- 调用时序约束:MEM_Monitor模块已通过uapi_mem_monitor_init()初始化完成
- 调用上下文约束:需在主线程调用,禁止在中断上下文中调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| monitor | mem_monitor_t | MEM_Monitor监控器索引 | MEM_MONITOR_NUM_0(0) / MEM_MONITOR_NUM_1(1) / MEM_MONITOR_NUM_2(2) / MEM_MONITOR_NUM_3(3) / MEM_MONITOR_NUM_4(4) / MEM_MONITOR_NUM_5(5) / MEM_MONITOR_NUM_6(6) |
| config | mem_monitor_config_t * | 监控配置参数 | 非NULL,addr_start < addr_end,地址在监控器有效区域内 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 地址段设置成功 |
| ERRCODE_MEM_MONITOR_INVALID_PARAMETER(0x80001400) | 参数无效 | 地址段设置失败,地址范围无效 |
| Other | 其他错误码,参考errcode_t | 其他执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_MEM_MONITOR | 编译参与宏 | 控制mem_monitor模块参与编译 | n |
Type definitions
errcode_t
使用说明
作为uapi_mem_monitor_init、uapi_mem_monitor_set_section的返回值类型。[SDK公共基础类型]
uapi_mem_monitor_callback_t
使用说明
作为uapi_mem_monitor_enable的入参callback的类型。回调在监控地址段被访问触发中断时由中断处理函数调用;参数addr为触发访问的监控地址;参数id为读写模式及访问的总线id;回调返回值为void,无需检查。
Enumerations
mem_monitor
typedef enum mem_monitor {
MEM_MONITOR_NUM_0,
MEM_MONITOR_NUM_1,
#if CORE == APPS
MEM_MONITOR_NUM_2,
MEM_MONITOR_NUM_3,
MEM_MONITOR_NUM_4,
#endif
#if CORE == BT
MEM_MONITOR_NUM_5,
MEM_MONITOR_NUM_6,
#endif
MEM_MONITOR_NUM_MAX
} mem_monitor_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| MEM_MONITOR_NUM_0 | 0 | COMAHB0监控器 |
| MEM_MONITOR_NUM_1 | 1 | COMAHB1监控器 |
| MEM_MONITOR_NUM_2 | 2 | COMAHB2监控器(CORE == APPS时可用) |
| MEM_MONITOR_NUM_3 | 3 | COMAHB3监控器(CORE == APPS时可用) |
| MEM_MONITOR_NUM_4 | 4 | COMAHB4监控器(CORE == APPS时可用) |
| MEM_MONITOR_NUM_5 | 5 | COMAHB5监控器(CORE == BT时可用) |
| MEM_MONITOR_NUM_6 | 6 | COMAHB6监控器(CORE == BT时可用) |
| MEM_MONITOR_NUM_MAX | 7 | 监控器数量上限,用于边界校验 |
mem_monitor_section
typedef enum mem_monitor_section {
MEM_MONITOR_SECTION_0,
MEM_MONITOR_SECTION_1,
MEM_MONITOR_SECTION_2,
MEM_MONITOR_SECTION_3
} mem_monitor_section_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| MEM_MONITOR_SECTION_0 | 0 | 监控地址段0 |
| MEM_MONITOR_SECTION_1 | 1 | 监控地址段1 |
| MEM_MONITOR_SECTION_2 | 2 | 监控地址段2 |
| MEM_MONITOR_SECTION_3 | 3 | 监控地址段3 |
mem_monitor_mode
typedef enum mem_monitor_mode {
MEM_MONITOR_MODE_READ = 1, /*!< MEM_Monitor mode: read mode. */
MEM_MONITOR_MODE_WRITE /*!< MEM_Monitor mode: write mode. */
} mem_monitor_mode_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| MEM_MONITOR_MODE_READ | 1 | 监控读模式 |
| MEM_MONITOR_MODE_WRITE | 2 | 监控写模式 |
Structures
mem_monitor_config
typedef struct mem_monitor_config {
mem_monitor_section_t section; /*!< Address section for memory monitoring. */
uint32_t addr_start; /*!< Monitoring start address. */
uint32_t addr_end; /*!< Monitoring end address. */
mem_monitor_mode_t mode; /*!< Memory monitoring mode. */
} mem_monitor_config_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| section | mem_monitor_section_t | 内存监控地址段编号 |
| addr_start | uint32_t | 监控起始地址 |
| addr_end | uint32_t | 监控结束地址 |
| mode | mem_monitor_mode_t | 内存监控模式 |