ARM上的计时错误因素为1000

时间:2014-06-08 10:11:26

标签: c++11 arm chrono

我正在使用std::chrono工具来获取从ADC获取的数据的精确时序。

我的程序读取内存中的数据,并从high_resolution_clock::now()获取完成此操作的时间。

然后等待一段时间使用std_thread::sleep_for()并再次开始,直到达到所需的采集样本数量。

该程序使用arm-linux-gnueabi-g++ version 4.7.3

进行交叉编译

现在我的问题:我获得一个频率为1Hz的方波,这样我就知道了预期的时间。但是当我使用std::chrono::microseconds转换持续时间时,我会以毫秒为单位获得时间。当我使用std::chrono::milliseconds投射时,我获得了秒!因此有一个因子1000的转变。

但请注意,函数std_thread :: sleep_for()工作正常:我在这里也使用std::chrono::milliseconds并要求它睡眠100毫秒,我获得了每秒预期的10次采集。

有人对此发表评论吗?似乎c ++ 11是实验性的,所以你认为那里可能有一个错误吗?

感谢。

代码的相关部分是:

// Acquire example

typedef std::chrono::high_resolution_clock::time_point time_pt_t;
typedef std::chrono::milliseconds duration_t;
typedef std::vector< duration_t > vector_time;

Acquire(unsigned int nsamp, int samptime)
{
    vector_time(nsamp);
    std::chrono::milliseconds sampling_time(samptime);

    time_pt_t start = std::chrono::high_resolution_clock::now();

    for(unsigned int i=0;i<nsamp;i++){
        time_pt_t time_tmp = std::chrono::high_resolution_clock::now();

        // do acquisition

        time[i] = std::chrono::duration_cast<duration_t>(time_tmp - start);
        std::this_thread::sleep_for(sampling_time);
    }
}

0 个答案:

没有答案