跳转至

mem_monitor

mem_monitor 提供内存监控功能,支持对指定地址段的读写访问进行监控和中断回调通知。

头文件清单

#include "include/driver/mem_monitor.h"

接口清单

接口名称 功能简述
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

errcode_t uapi_mem_monitor_init(void)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 初始化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

void uapi_mem_monitor_deinit(void)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 去初始化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

void uapi_mem_monitor_enable(mem_monitor_t monitor, uapi_mem_monitor_callback_t callback)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 使能指定的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

void uapi_mem_monitor_disable(mem_monitor_t monitor)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 去使能指定的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

errcode_t uapi_mem_monitor_set_section(mem_monitor_t monitor, mem_monitor_config_t *config)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 设置指定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

typedef uint32_t errcode_t;

使用说明

作为uapi_mem_monitor_init、uapi_mem_monitor_set_section的返回值类型。[SDK公共基础类型]

uapi_mem_monitor_callback_t

typedef void (*uapi_mem_monitor_callback_t)(uint32_t addr, uint32_t id);

使用说明

作为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 内存监控模式

Macros

ERRCODE_SUCC [SDK公共共享宏]

#define ERRCODE_SUCC                                        0UL

ERRCODE_MEM_MONITOR_INVALID_PARAMETER

#define ERRCODE_MEM_MONITOR_INVALID_PARAMETER               0x80001400