前言¶
概述
本文档针对PLT的各类业务,提供内存维测指导。
读者对象
本文档主要适用于以下工程师:
技术支持工程师
产品测试工程师
维护工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修改记录
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
02 |
2024-09-14 |
更新“内存维测开关”章节内容。 |
01 |
2024-07-03 |
第一次正式版本发布。 |
简介¶
内存维测是系统维测中非常关键的功能,比如:想知道系统中,当前内存的分配和占用情况;想知道各个task的栈占用情况;想知道某个task内存分配具体分配情况。这些内存信息对于内存优化、以及内存定位(比如内存泄露)至关重要。
本文描述如何在BS2X系列上如何进行内存维测,包括:
查看系统heap内存总体分配和使用情况。
查看每个task的malloc情况(当前分配和峰值分配)。
查看每个task的栈分配和使用情况(当前使用和峰值使用)。
查看每个内存在哪里分配。
内存维测命令已经集成到AT命令中,用户可以直接使用。
内存维测功能¶
查看系提heap总体信息¶
该维测功能,用来查看系统中heap内存使用看情况。
查看系统heap信息命令:AT+HEAPSTAT

查看task栈使用情况¶
该维测功能,用来查看各个Task的栈的分配使用使用情况。
可以通过该命令,来优化调整stack的分配大小,节约内存。
查看任务栈使用情况:AT+TASKSTACK

查看每个task的内存分配情况¶
查看某个task的malloc情况:AT+TASKMALLOC=“任务id”;
这里的“任务id”,可以通过“AT+HEAPSTAT”或“AT+TASKSTACK”命令获取。

查看中断中、启动阶段的内存分配情况¶
系统中,除了task中分配内存外,还有中断中分配的内存、系统启动阶段的分配的内存,这些地方分配的地方没有对应的task,因此统一归类到一个特殊id中。
可以通过“AT+HEAPSTAT” 命令,获取non-task alloc对应的id。
查看非任务中内存分配情况的命令,也是:AT+TASKMALLOC=“id”,显示格式相同。

内存维测开关¶
内存维测通过配置宏进行使能和关闭控制,需要进入到“kernel\liteos\liteos_v208.6.0_b017\Huawei_LiteOS\tools\build\config\”目录中找到项目使用的config文件,以BS21A为例,需要打开bs21a_key.config,修改以下宏控制开关:
关闭内存调测功能:
# LOSCFG_MEM_TASK_STAT=y is not set
# LOSCFG_MEM_DFX_SHOW_CALLER_RA is not set
开启内存调测功能:
LOSCFG_MEM_TASK_STAT=y
LOSCFG_MEM_DFX_SHOW_CALLER_RA=y
说明:
必须要找对项目对应的config文件,开启和关闭维测配置。
LOSCFG_MEM_DFX_SHOW_CALLER_RA用来查看在哪里调用了内存分配的函数,该宏打开会消耗一定内存空间;建议在商用阶段,关闭该宏。
修改内存配置宏后,一定对SDK进行clean完整编译,否则可能会有不生效的情况。




