实时嵌入式Linux中的数据记录时延迟峰值

实时嵌入式Linux中的数据记录时延迟峰值,第1张

概述我有一个机器人运行控制代码,在Beaglebone Black上的PREEMPT-RT补丁 Linux *** 作系统上具有实时优先级.所有代码都用C语言编写,运行频率为500Hz. 在运行代码时,我经常注意到几百毫秒的延迟,我已将其跟踪到我编写的数据记录功能.这种延迟导致我的机器人控制失败,因为我有很多,具体取决于实时功能. 代码的相关部分如下.为了清晰起见,我已经删除了很多代码,但如果需要的话,我会编 我有一个机器人运行控制代码,在Beaglebone Black上的PREEMPT-RT补丁 Linux *** 作系统上具有实时优先级.所有代码都用C语言编写,运行频率为500Hz.

在运行代码时,我经常注意到几百毫秒的延迟,我已将其跟踪到我编写的数据记录功能.这种延迟导致我的机器人控制失败,因为我有很多,具体取决于实时功能.

代码的相关部分如下.为了清晰起见,我已经删除了很多代码,但如果需要的话,我会编辑这篇文章.

file *file;int main(int argc,char** argv) {    file = fopen(logname,"w");    while (1) {        /* Control code stuff*/        logData();        time_msec = time_msec + controlLoopTime;    }}voID logData() {    if (time_msec - logTimer_msec >= LOG_TIMER) {        logTimer_msec = time_msec;        if (!bLogCreated) {            fprintf(file,"SensorData1 SensorData2 SensorDatan"                    );            bLogCreated = TRUE;        }        // log data to file        fprintf(file,"%.2f %.2f\n",sensorData1,sensorData2,sensorDatan        );    }}

我需要以很好的速率(可能是100-125Hz)记录来自多个变量(可能是20-50)的数据.数据不需要以控制速率(每2ms)记录,但我已经将其减少到12ms,我仍然看到每隔几分钟出现延迟峰值.

延迟可能是fprintf调用的问题.这是BeagleBone Black的限制,我的代码,还是数据记录的本质?

这里也提出了类似的问题,但似乎没有解决我的问题:Finding latency issues (stalls) in embedded Linux systems

解决方法 使用fprintf是一个巨大的时间下沉,特别是对于R / T日志记录.以二进制进行日志记录并编写实用程序以便稍后将其打印出来.

代替:

fprintf(file,"%.2f %.2f %.2f",data1,data2,data3);

做:

fwrite(&data1,sizeof(double),1,file);fwrite(&data2,file);fwrite(&data3,file);

更好的是:

struct data {    double data1;    double data2;    double data3;    time_t event_time;    ...};struct data data;fwrite(&data,sizeof(struct data),file);

如果它仍然太慢,则将结构附加到环形队列并使用单独的线程写出条目.

如果磁盘写入无法跟上[Now]二进制数据,请维护环队列,并且只有在检测到致命错误时才会丢弃队列.

另外,考虑在写入时使用mmap访问文件.在这里查看我的答案[带基准]:read line by line in the most efficient way *platform specific*

总结

以上是内存溢出为你收集整理的实时嵌入式Linux中的数据记录时延迟峰值全部内容,希望文章能够帮你解决实时嵌入式Linux中的数据记录时延迟峰值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1032553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存