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

时间:2016-11-23 07:19:55

标签: c++ c++11

我试图找到一种方法来衡量代码执行时间,不用使用下面列出的约束。

在我的要求中,它是一个具有非常严格一致性的嵌入式系统。

我所能找到的只是使用C标头,未经批准的Google C ++编码标准标题或提升标题,这些标题不包括在项目一致性中。

我浏览了看似相似但无法找到所需内容的建议帖子。请帮忙!

约束不使用以下内容,

此样式检查器列出了未经批准的时间表。 https://github.com/google/styleguide/blob/gh-pages/cpplint/cpplint.py

4 个答案:

答案 0 :(得分:8)

如果我们谈论C ++ 11 - 唯一的方法是使用public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) { try { System.setProperty("http.keepAlive", "false"); // check for request method if (method == "POST") { // request method is POST // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(group,"")); httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8")); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } else if (method == "GET") { // request method is GET DefaultHttpClient httpClient = new DefaultHttpClient(); if (params.size() != 0) { String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString; } HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } 。谷歌风格指南在这里不是某种最终权威(有时它是非常值得怀疑的)。

std::chrono被证明是好的和稳定的,甚至在AAA游戏的游戏引擎中使用,请亲自看看HERE。确切提供所需内容的好例子是HERE

如果您仍然不想要它,那么没有其他C ++ 11方法可以做到这一点,但您可能希望查看C风格的度量,如HERE

仅供参考 - 所有方法都使用系统API,因此包含std::chrono,无法避免。

答案 1 :(得分:3)

对于嵌入式系统,通常会在代码中更改GPIO状态,然后将示波器连接到引脚并查找生成的波形。这对运行时影响最小,因为更改GPIO是一种廉价的操作。它不需要任何库和附加代码。但它需要额外的硬件。

注意:嵌入式是非常容易理解的概念。 GPIO技巧与微控制器更相关。

答案 2 :(得分:2)

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

答案 3 :(得分:-1)

你的意思是这样的吗? (对于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