在裸机嵌入式系统(ARM)上进行分析剖析

10

我想知道如何在裸机系统(ARM Cortex A8)上对软件进行性能分析?之前我使用的是具有内置基准统计数据的模拟器,现在我想比较来自真实硬件(在BeagleBoard-Xm上运行)的结果。

我知道可以使用gprof,但我有点迷失,因为它假设您必须在目标系统上运行Linux?

我使用CodeSourcery的arm-none-eabi交叉编译器构建可执行文件,目标系统正在运行FreeRTOS。

2个回答

5
请仔细评估您所谓的“分析”。您确实非常接近裸机操作,很可能需要承担类似gprof工具执行的某些工作。
您想计时一个函数调用吗?或者是中断服务例程?进入和退出检查代码时切换GPIO线怎么样?数据记录器或示波器可以设置为在这些事件上触发。(根据我的经验,数据记录器更方便,因为它可以配置为捕获这些事件序列,从而使我能够计算平均时间。)
您想计算执行次数吗?Cortex A8配备了许多功能(如可配置的事件计数器)可提供帮助:link。您的ARM芯片可能还配备了其他可用的外设(取决于供应商)。无论如何,请查看上面的链接——新的ARM有很多酷炫的功能,但我没有像我想象的那样使用它们!;-)

我在思考是否可以使用像gprof这样的任何分析工具来收集有关各种数据的信息,例如时钟周期、调用图、每个函数中花费的时间以及调用次数。但是如果我能知道从开始到结束运行应用程序需要多少个时钟周期,那就太好了。你给我的链接很不错,我会研究一下,谢谢! - MrGigu
嗨,我已经让时钟周期计数器工作了,但是我想知道是否可以使用PMU(性能监视器)来计时函数?我还有一个Flyswatter 2调试器,也许可以用来做些什么?我需要购买数据记录器或示波器来计时硬件吗?我从未使用过这些设备,它们非常昂贵! - MrGigu
这里有一款价格合理的逻辑分析仪。它对我来说工作得足够好:http://www.nci-usa.com/frame_products_overview.htm。一些PMU统计数据可以导出到ETM中-从那里可能可以使用Flyswatter的JTAG接口访问它们。(我只是猜测)。 - Throwback1986
对于简单的函数调用计时,您可以考虑使用PMU的时钟计数器进行编写。在函数顶部保存时钟计数,然后在函数结束时进行比较。这应该会给您一个合理的估计,在两者之间发生的时钟计数。我不希望监视时钟计数寄存器的开销以任何重要的方式影响您的函数计时。 - Throwback1986

3

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。仅包含链接的答案如果链接页面发生更改,可能会变得无效。 - hiro protagonist
要对作者进行批评或请求澄清,请在其文章下方留言。 - Bruce
Erich,这在2020年仍然是解决方案吗? - Danijel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接