在 Keil uVision 5 模拟器中对内存使用进行基准测试
Benchmarking memory use in the Keil uVision 5 simulator
我有一个 Keil uVision 项目,我想对其进行广泛的基准测试。该代码目前在模拟器模式下 运行。为了可视化结果,我们只需将字符存储在内存区域并将所述区域显示为 ASCII。
这种方法非常适合使用 Cortex-M 系统节拍获取计时。但是,我不知道代码的 ram 使用情况:
- 理想情况下,我希望模拟器在使用最大内存量时停止执行。
- 我还想查看最大堆使用量(甚至每个函数)。
有没有办法获取这些值?我知道构建系统报告的最大堆栈大小。
有没有办法限制 uVision 模拟器中可用的 ram 数量?
谢谢
有一个相当明显的解决方案:只需计算内存中的 ram window。首先找到为堆和栈分配的内存区域(这通常可以在启动程序集文件中找到)。然后在调试器中检查内存 window 并查看内存未更改的位置。
Keil 通常将内存初始化为 0,这样可以很容易地看到堆栈边界。
堆栈总使用量可以通过以下方式计算
$TOTAL = $TOP - $BOTTOM
如果看不到边界,首先用模式初始化内存可能有意义 (see here)。
我有一个 Keil uVision 项目,我想对其进行广泛的基准测试。该代码目前在模拟器模式下 运行。为了可视化结果,我们只需将字符存储在内存区域并将所述区域显示为 ASCII。
这种方法非常适合使用 Cortex-M 系统节拍获取计时。但是,我不知道代码的 ram 使用情况:
- 理想情况下,我希望模拟器在使用最大内存量时停止执行。
- 我还想查看最大堆使用量(甚至每个函数)。
有没有办法获取这些值?我知道构建系统报告的最大堆栈大小。
有没有办法限制 uVision 模拟器中可用的 ram 数量?
谢谢
有一个相当明显的解决方案:只需计算内存中的 ram window。首先找到为堆和栈分配的内存区域(这通常可以在启动程序集文件中找到)。然后在调试器中检查内存 window 并查看内存未更改的位置。
Keil 通常将内存初始化为 0,这样可以很容易地看到堆栈边界。 堆栈总使用量可以通过以下方式计算
$TOTAL = $TOP - $BOTTOM
如果看不到边界,首先用模式初始化内存可能有意义 (see here)。