CAN消息传输的定时不一致 我尝试用C++编写一个程序,用OpenCV做一些视频处理,然后使用视频信息将信息发送到CAN总线上,使用PCANBASIC。 当CAN总线的代码自行运行时,消息上的计时非常好,即与我交谈的系统不会抱怨。但是,当引入程序的OpenCV部分时,循环时间会间歇性地增加到不可接受的值,从而导致问题

CAN消息传输的定时不一致 我尝试用C++编写一个程序,用OpenCV做一些视频处理,然后使用视频信息将信息发送到CAN总线上,使用PCANBASIC。 当CAN总线的代码自行运行时,消息上的计时非常好,即与我交谈的系统不会抱怨。但是,当引入程序的OpenCV部分时,循环时间会间歇性地增加到不可接受的值,从而导致问题,c++,multithreading,opencv,can-bus,chrono,C++,Multithreading,Opencv,Can Bus,Chrono,我使用chrono::high_resolution_clock来比较开始时间和现在的时间。如果此比较大于10ms,则我将发送CAN消息并重新启动时钟 我尝试了以下方法: 将OpenCV更新为最新版本(希望它能运行得更快/释放资源) 将CAN消息函数所在线程的线程优先级设置为更高的优先级。设置为0,我认为这是最高优先级 降低比较以8ms发送消息,这是一种解决方法,而不是修复方法 //Every 10ms send a CAN signal chrono::duration<double,

我使用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;
        }
    }
//每10毫秒发送一个CAN信号
chrono::durationxyTimeDifference=timeNow-xyTimer;
xyTimerCompare=xyTimeDifference.count();
如果(xyTimerCompare>10)
{
如果(xyTimerCompare>16)
{

什么样的系统,PC?是的,这是一个基于PC的解决方案。使用PCAN基本API通过PCAN-USB接口将消息发送到CAN总线上。我的代码中有四个线程运行,但当我引入运行OpenCV的线程时,一切都开始超时。您是否使用任何运行时来管理线程?例如.threading building blocks?或者您正在使用裸机pthreads?学童错误-我在调试模式下运行代码。从什么样的系统,一台PC?是的,这是一个基于PC的解决方案。使用PCAN基本API通过PCAN-USB接口将消息发送到CAN总线上。我的代码中运行了四个线程,但一切都开始失控当我介绍运行OpenCV的线程时告诉我。您是否使用任何运行时来管理线程?例如,线程构建块?或者您是否使用裸机pthreads?学童错误-我在调试模式下运行代码。