跳转至

Mem Monitor

Mem Monitor 是硬件级内存访问监控模块。配置监控地址范围(起始+结束地址)和监控模式(读/写),当 CPU 访问落入该范围时硬件触发中断并调用用户回调。

核心用途:调试阶段定位内存越界、野指针、栈溢出等问题——硬件捕获异常访问并记录触发地址。

头文件清单

#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 设置监控地址段及工作模式

Functions

uapi_mem_monitor_init

errcode_t uapi_mem_monitor_init(void)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 初始化MEM_Monitor驱动模块,完成硬件资源申请与寄存器配置
  • 调用前须确保MEM_Monitor硬件时钟已使能
  • 重复调用可能导致初始化状态异常,需先调用uapi_mem_monitor_deinit()去初始化后再重新初始化

前置条件

  • MEM_Monitor硬件时钟已使能
  • 尚未初始化或已通过uapi_mem_monitor_deinit()去初始化

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x0) 执行成功 初始化成功
Other 其他错误码,参考errcode_t 执行失败

uapi_mem_monitor_deinit

void uapi_mem_monitor_deinit(void)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 去初始化MEM_Monitor驱动模块,释放已申请的硬件资源
  • 调用后所有MEM_Monitor通道将被禁用,回调函数不再触发
  • 需在模块已初始化状态下调用,否则操作无效

前置条件

  • 模块已通过uapi_mem_monitor_init()初始化完成

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通道,并注册中断回调函数
  • 当被监控的内存地址段发生读/写访问时,触发回调通知
  • 同一通道重复使能会覆盖先前注册的回调函数

前置条件

  • 模块已通过uapi_mem_monitor_init()初始化完成
  • 已通过uapi_mem_monitor_set_section()配置监控地址段及工作模式

入参

名称 参数类型 详细说明 约束取值范围
monitor mem_monitor_t MEM_Monitor通道索引 由mem_monitor_porting.h定义
callback uapi_mem_monitor_callback_t MEM_Monitor中断回调函数 非NULL,参考uapi_mem_monitor_callback_t

uapi_mem_monitor_disable

void uapi_mem_monitor_disable(mem_monitor_t monitor)

头文件清单

#include "include/driver/mem_monitor.h"

功能说明

  • 去使能指定索引的MEM_Monitor通道,停止监控并取消中断触发
  • 调用后该通道不再响应内存访问事件
  • 对未使能的通道调用此接口无效果

前置条件

  • 模块已通过uapi_mem_monitor_init()初始化完成

入参

名称 参数类型 详细说明 约束取值范围
monitor mem_monitor_t MEM_Monitor通道索引 由mem_monitor_porting.h定义

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通道的监控地址段及工作模式
  • 配置后需调用uapi_mem_monitor_enable()使能通道方可生效
  • 监控地址段由起始地址、结束地址及地址段编号共同确定

前置条件

  • 模块已通过uapi_mem_monitor_init()初始化完成
  • config指针不为NULL,且指向的内存空间已申请成功

入参

名称 参数类型 详细说明 约束取值范围
monitor mem_monitor_t MEM_Monitor通道索引 由mem_monitor_porting.h定义
config mem_monitor_config_t * 监控配置参数 非NULL,参考mem_monitor_config_t

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x0) 执行成功 配置成功
Other 其他错误码,参考errcode_t 执行失败

Type definitions

uapi_mem_monitor_callback_t

typedef void (*uapi_mem_monitor_callback_t)(uint32_t addr, mem_monitor_mode_t mode);

使用说明:用于uapi_mem_monitor_enable的回调注册,当被监控内存地址段发生读/写访问时触发,参数addr为触发监控的地址,参数mode为触发时的读写模式。

Enumerations

mem_monitor_mode_t

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_t

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 内存监控模式,参考mem_monitor_mode_t