小编jek*_*kso的帖子

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

我有一个机器人运行控制代码,在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
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

这里也提出了类似的问题,但似乎没有解决我的问题:在嵌入式Linux系统中查找延迟问题(停顿)

c latency real-time embedded-linux preempt-rt

5
推荐指数
1
解决办法
720
查看次数

标签 统计

c ×1

embedded-linux ×1

latency ×1

preempt-rt ×1

real-time ×1