最佳C 11测量嵌入式系统代码执行时间的方法

Best C++11 way to measure code execution time for an Embedded system

本文关键字:代码 执行时间 方法 系统 嵌入式 测量 最佳      更新时间:2023-10-16

我试图找到一种方法来测量代码执行 time 没有使用以下列出的约束。

根据我的要求,它是一个具有非常严格符合性的嵌入式系统。

我只能发现使用C标题,Google C 编码标准的未批准标题或不包括项目符合的Boost。

我浏览了建议的帖子,这些帖子看起来相似,但找不到想要的答案。请帮助!

约束不使用以下内容,

  • Boost Libraries
  • C系统标头,例如sys/time.h

  • Google C 样式指南的未经批准的标头(例如chrono

  • 目标平台是Linux

此样式检查器已将Chrono列出为未批准的。https://github.com/google/styleguide/blob/gh-pages/cpplint/cpplint.py

如果我们在谈论C 11-唯一的方法是使用std::chrono。Google Style指南在这里不是某种最终权限(有时是值得怀疑的)。

std::chrono被证明是良好而稳定的,甚至在AAA游戏中的游戏引擎中使用,请在此处亲自查看。确切需要的好示例

如果您仍然不想要它,则没有其他C 11的方法,但是您可能想看C型尺寸,例如这里。

仅供您的信息 - 所有方法都使用系统API,因此包括<time.h>,无法避免它。

对于嵌入式系统,有一种常见的做法可以在代码中更改GPIO状态,然后将示波器挂钩到PIN上并寻找产生的波形。这对运行时的影响很小,因为更改GPIO是一个廉价的操作。它不需要任何库和其他代码。但这需要其他硬件。

注意:嵌入是相当可拉伸的概念。GPIO技巧与微控制器更相关。

最终产品中需要时间测量吗?如果不是,我建议使用您喜欢的任何东西,并使用开关不将这些测量例程编译到最终产品中。

您的意思是吗?(对于Windows平台)

#include <Windows.h>
class stopwatch
{
    double PCFreq = 0.0;
    double CounterStart = 0; //google style compliant, less accurate
    //__int64 CounterStart = 0; //for accuracy
    LARGE_INTEGER li;
public:
    void StartCounter()
    {
        if (!QueryPerformanceFrequency(&li))ExitProcess(0);
        PCFreq = double(li.QuadPart) / 1000.0;
        QueryPerformanceCounter(&li); CounterStart = li.QuadPart;
    }
    double GetCounter() { QueryPerformanceCounter(&li); return double(li.QuadPart - CounterStart) / PCFreq; }
};

用法:

stopwatch aclock;
aclock.StartCounter(); //start
//....///
cout<<aclock.GetcCounter()<<endl; //output time passed in milliseconds