CAN消息传输的时间不一致

时间:2019-05-11 12:38:14

标签: c++ multithreading opencv can-bus chrono

我试图用C ++编写一个程序,该程序使用OpenCV进行一些视频处理,然后使用视频中的信息使用PCAN-basic将消息发送到CAN总线上。 当CAN总线的代码自行运行时,消息上的计时相当不错,即我正在与之交谈的系统不会抱怨。但是,当引入程序的OpenCV部分时,循环时间会间歇性地增加到不可接受的值,这会引起问题。

我正在使用chrono :: high_resolution_clock比较开始时间和现在的时间。如果此比较> 10ms,则我正在发送CAN消息并重新启动时钟。

我尝试了以下方法:

将OpenCV更新到最新版本(希望它可以运行得更快/释放资源)

将CAN消息功能所在的线程的线程优先级设置为更高的优先级。设置为0,我认为这是最高优先级。

降低比较以在8ms时发出消息,这是一种解决方法,而不是解决方法。

//Every 10ms send a CAN signal
chrono::duration<double, milli>xyTimeDifference = timeNow - xyTimer;
xyTimerCompare = xyTimeDifference.count();

if (xyTimerCompare > 10)
     {
        if (xyTimerCompare > 16)
        {
            cout << "xyTimerComapare went over by: " << xyTimerCompare << endl;
        }
        result = CAN_Write(PCAN_USBBUS1, &joystickXY);
        //Reset the timer
        xyTimer = chrono::high_resolution_clock::now();
        if (result != PCAN_ERROR_OK)
        {
            break;
        }
    }

是否有更好的方法来获得+/- 1ms以内的可靠信号?

0 个答案:

没有答案