c++ - Time Short Functions with cpu time 使用 RTEMS 操作系统

标签 c++ profiling rtems

我希望在实时操作系统 RTEMS 中分析一些代码。本质上,rtems 有一堆读取时间的函数,其中最有用的是 rtems_clock_get_ticks_since_boot

这里的问题是,无论出于何种原因,报告的时钟滴答与我们的状态机循环速率 5kHz 同步,而处理器运行在 200MHz 左右(嵌入式系统).我知道这是因为我记录了时钟时间,等了 1 秒,只有 5000 个滴答声过去了。

那么问题是:

如何从 RTEMS 获取实际的 CPU 节拍?

附言。 clock() 来自 GNU C(有同样的问题)

我一直在研究一个指南here ,但我得到 impossible constraint in asm 这表明我需要使用一些不同的汇编程序关键字。也许有人可以指出我类似的东西?


上下文

我想剖析一些代码,所以基本上:

start = cpu_clock_ticks()
    //Some code
time = cpu_clock_ticks() - start;

代码运行时间少于 0.125 毫秒,因此 clock() 和其他 rtems 函数获得的 8khz 计数器不会削减它。

最佳答案

可以使用示波器进行准确的性能测量,前提是有软件可以写入的 GPIO、测试点或引脚(并且示波器探头可以连接到)。

这里的方法是向管脚发送一个脉冲。示波器可以设置为触发脉冲。一些更智能的示波器可以对脉冲宽度进行统计,例如平均时间和最长时间。

在我们的嵌入式系统上,H/W 团队非常友好地提供了 8 个测试点供我们使用。我们将引脚初始化为零。在要分析的代码的开头,我们将 1 写入引脚。在分析代码的末尾,我们将 0 写入引脚。这会产生脉冲或方波。

示波器设置为在上升沿触发。探针连接到引脚并运行程序。调整示波器,使整个脉冲在屏幕上可见。重新运行程序。当示波器触发时,测量脉冲宽度。这将是执行的实际时间。

关于c++ - Time Short Functions with cpu time 使用 RTEMS 操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29089344/

相关文章:

c++ - 在 C++ 中释放多维数组

C++ 严格弱排序派生类

c++ - 令人困惑的 fork 系统调用

performance - 如何使用 Toad 跟踪 SQL

api - 如何分析 Laravel 的 REST API

c++ - 在程序中导致段错误不会被信号处理程序捕获

c++ - 无纹理的四边形显得较暗

python - 覆盖率和分析器的组合?

c - 如何获取库函数的内存位置?

c - 帮我找出错误?