c - 为了实时数值积分的目的,如何测量 c 中的时间?

标签 c time real-time numeric

我尝试编写 C 代码,其中一些包含时间导数的数值计算需要在实时动态系统设置中执行。为此,我需要在名为“dt”的变量中从一个周期到下一个周期进行最准确的时间评估:

static clock_t prev_time;
prev_time = clock();
while(1){
    clock_t current_time = clock();
    //do something
    double dt = (double)(current_time - prev_time)/CLOCKS_PER_SEC;
prev_time = current_time;
}

但是,当我通过集成(不断添加)dt 来测试这段代码时,即

static double elapsed_time = 0;
//the above-mentioned declaration and initialization in done here
while(1){
   //the above-mentioned code is executed here
   elapsed_time += dt;
   printf("elapsed_time : %lf\n", elapsed_time);
}

我得到的结果明显低于实际情况,一个因素在运行时是恒定的,但当我编辑代码的不相关部分时似乎有所不同(它的范围在实际时间的 1/10 到大约一半之间)。

我目前的猜测是 clock() 没有考虑内存访问所需的时间(在整个代码中的几个点,我打开一个外部文本文件并将数据保存在其中以用于诊断目的) .

但我不确定是不是这样。 此外,我找不到任何其他方法来准确测量时间。

有人知道为什么会这样吗?

编辑:代码在树莓派 3 上编译和执行,用于实现反馈 Controller

最佳答案

更新:事实证明,clock()不适合实时数值计算,因为它只占处理器上使用的时间。我使用 clock_gettime() 解决了这个问题<time.h> 中定义的函数.这将返回具有纳秒分辨率的全局时间(当然,这会带来一定的错误,这取决于您的时钟分辨率,但这是最好的选择)。

答案出奇地难以找到,所以感谢 Ian Abbott非常有用的帮助

关于c - 为了实时数值积分的目的,如何测量 c 中的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50252413/

相关文章:

php - 实时实时通知 Jquery PHP

javascript - Rails Angular 和实时更新

asp.net-mvc - HTML 5 实时数据

c - 这个数组函数有什么作用呢? - C 编程

c - C-删除节点函数中的双向链表

time - Google SpreadSheet - 处理 MM :SS. sss 时间格式

mysql - 如何将时间四舍五入到最接近的 15 分钟段

objective-c - 使用 NSTimer 的秒表错误地在显示中包含暂停时间

c - 有没有办法更好地路由流程?

C 预处理器 - 使用整数和宽字符串定义