对于我的当前项目,我必须研究Cortex-M4上不同算法的运行时行为(用过的周期)。该算法在C语言中是纯计算的,没有IO和中断。有什么提示和想法怎么做吗?
我目前的想法是创建一个最小的应用程序,并使用renode (https://renode.io/)进行循环计数:
创建一个带有固定签名的文件test.c,该函数运行我的algorithm
进行评级
现在问题是:
对于类似的purposes?
问候简
发布于 2021-02-09 15:51:29
FYI:我在Antmicro工作,是Renode的作者之一。
执行这种分析的方法确实有很多。请注意,Renode并不是周期精确的,但您可以跟踪虚拟时间的进展.
其中一种可能的方法是使用Renode的度量分析器。您可以在这里阅读文档:https://renode.readthedocs.io/en/latest/basic/metrics.html
它允许您捕获数据并用Python进行分析,或者立即生成一些图形:
# in Renode
(monitor) machine EnableProfiler "path_to_dump_file"
# in Bash
python3 tools/metrics_analyzer/metrics_visualizer/metrics-visualizer.py path_to_dump_file您还可以分析在UART上出现特定字符串之前所传递的虚拟时间。这可以通过机器人测试来完成。在这里可以找到时间戳提取的一个例子:https://github.com/renode/renode/blob/master/tests/platforms/QuarkC1000/QuarkC1000.robot#L44
${r} Wait For Line On Uart My String
Do Something With Time ${r.timestamp}另一种选择是对代码进行测试,并在需要时从内存中转储二进制数据。
您还可以在特定的Program值上添加要调用的钩子--然后可以将这样的时间戳转储到日志。
可能还有许多其他选项可以继续前进,但这将取决于您的特定用例。
Renode中的最小系统:取决于您的软件,它需要
如果您想要输出的话,如果是Cortex-M
更新:
我们添加了一些跟踪特性,允许您使用https://www.speedscope.app/或https://ui.perfetto.dev/显示执行跟踪,这在分析方面非常有用。
使其用于速度范围的快速方法是:
cpu EnableProfilerCollapsedStack @path/to/trace true有关更多细节,请参见docs:https://renode.readthedocs.io/en/latest/advanced/execution-tracing.html中的本章。
https://stackoverflow.com/questions/65457255
复制相似问题