Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RTO线程中的RoStMeTime+Mc++ C++_C++_Multithreading_Timer_Rtos_Mbed - Fatal编程技术网

使用RTO线程中的RoStMeTime+Mc++ C++

使用RTO线程中的RoStMeTime+Mc++ C++,c++,multithreading,timer,rtos,mbed,C++,Multithreading,Timer,Rtos,Mbed,我正在写一些软件来控制一架四轮直升机,我完全被RTO刺激器卡住了。我得到的错误是:没有构造函数rtos::RtosTimer::RtosTimer的实例与flightController.h第13行第29列中的参数列表匹配 我看过手册中的示例代码,我的代码似乎匹配。我也在谷歌上搜索过,但在RtosThreads中找不到任何关于使用RtosTimers的内容 也许我做得不对,所以如果有人有任何建议,我将不胜感激 这是给我带来问题的代码 //Rtos Timers RtosTimer UpdateF

我正在写一些软件来控制一架四轮直升机,我完全被RTO刺激器卡住了。我得到的错误是:没有构造函数rtos::RtosTimer::RtosTimer的实例与flightController.h第13行第29列中的参数列表匹配

我看过手册中的示例代码,我的代码似乎匹配。我也在谷歌上搜索过,但在RtosThreads中找不到任何关于使用RtosTimers的内容

也许我做得不对,所以如果有人有任何建议,我将不胜感激

这是给我带来问题的代码

//Rtos Timers
RtosTimer UpdateFlightTimer(Task500Hz, osTimerPeriodic, (void *)0);
RtosTimer UpdateCommandTimer(Task50Hz, osTimerPeriodic, (void *)0);

// A thread to monitor the serial ports
void FlightControllerThread(void const *args) 
{  
UpdateFlightTimer.start(2);
UpdateCommandTimer.start(20);

// Wait here forever
Thread::wait(osWaitForever);
}

void Task500Hz(void const *n)
{
//Get IMU data and convert to yaw, pitch, roll
_freeIMU.getQ(_rawQuaternion);
_freeIMU.getRate(_gyroRate);
GetAttitude();

//Rate mode
if(_rate == true && _stab == false)
{
    //Update rate PID process value with gyro rate
    _yawRatePIDController->setProcessValue(_gyroRate[0]);
    _pitchRatePIDController->setProcessValue(_gyroRate[2]);
    _rollRatePIDController->setProcessValue(_gyroRate[1]);

    //Update rate PID set point with desired rate from RC
    _yawRatePIDController->setSetPoint(_rcConstrainedCommands[0]);
    _pitchRatePIDController->setSetPoint(_rcConstrainedCommands[1]);
    _rollRatePIDController->setSetPoint(_rcConstrainedCommands[2]);

    //Compute rate PID outputs
    _ratePIDControllerOutputs[0] = _yawRatePIDController->compute();
    _ratePIDControllerOutputs[1] = _pitchRatePIDController->compute();
    _ratePIDControllerOutputs[2] = _rollRatePIDController->compute();
}
//Stability mode
else
{
    //Update stab PID process value with ypr
    _yawStabPIDController->setProcessValue(_yrp[0]);
    _pitchStabPIDController->setProcessValue(_yrp[2]);
    _rollStabPIDController->setProcessValue(_yrp[1]);

    //Update stab PID set point with desired angle from RC
    _yawStabPIDController->setSetPoint(_yawTarget);
    _pitchStabPIDController->setSetPoint(_rcConstrainedCommands[1]);
    _rollStabPIDController->setSetPoint(_rcConstrainedCommands[2]);

    //Compute stab PID outputs
    _stabPIDControllerOutputs[0] = _yawStabPIDController->compute();
    _stabPIDControllerOutputs[1] = _pitchStabPIDController->compute();
    _stabPIDControllerOutputs[2] = _rollStabPIDController->compute();

    //if pilot commanding yaw
    if(abs(_rcConstrainedCommands[0]) > 5)
    {  
        _stabPIDControllerOutputs[0] = _rcConstrainedCommands[0];  //Feed to rate PID     (overwriting stab PID output)
        _yawTarget = _yrp[0];
    }

    //Update rate PID process value with gyro rate
    _yawRatePIDController->setProcessValue(_gyroRate[0]);
    _pitchRatePIDController->setProcessValue(_gyroRate[2]);
    _rollRatePIDController->setProcessValue(_gyroRate[1]);

    //Update rate PID set point with desired rate from stab PID
    _yawRatePIDController->setSetPoint(_stabPIDControllerOutputs[0]);
    _pitchRatePIDController->setSetPoint(_stabPIDControllerOutputs[1]);
    _rollRatePIDController->setSetPoint(_stabPIDControllerOutputs[2]);

    //Compute rate PID outputs
    _ratePIDControllerOutputs[0] = _yawRatePIDController->compute();
    _ratePIDControllerOutputs[1] = _pitchRatePIDController->compute();
    _ratePIDControllerOutputs[2] = _rollRatePIDController->compute();
}


//Calculate motor power if flying
if(_rcCommands[3] > 0 && _armed == true)
{
    _motorPower[0] = Constrain(_rcConstrainedCommands[3] + _ratePIDControllerOutputs[1] + _ratePIDControllerOutputs[2] + _ratePIDControllerOutputs[0], MOTORS_MIN, MOTORS_MAX);
    _motorPower[1] = Constrain(_rcConstrainedCommands[3] + _ratePIDControllerOutputs[1] - _ratePIDControllerOutputs[2] - _ratePIDControllerOutputs[0], MOTORS_MIN, MOTORS_MAX);
    _motorPower[2] = Constrain(_rcConstrainedCommands[3] - _ratePIDControllerOutputs[1] - _ratePIDControllerOutputs[2] + _ratePIDControllerOutputs[0], MOTORS_MIN, MOTORS_MAX);
    _motorPower[3] = Constrain(_rcConstrainedCommands[3] - _ratePIDControllerOutputs[1] + _ratePIDControllerOutputs[2] - _ratePIDControllerOutputs[0], MOTORS_MIN, MOTORS_MAX);
}
//Not flying
else
{
    //Disable motors
    _motorPower[0] = MOTORS_OFF;
    _motorPower[1] = MOTORS_OFF;
    _motorPower[2] = MOTORS_OFF;
    _motorPower[3] = MOTORS_OFF;

    _notFlying ++;
    if(_notFlying > 200) //Not flying for 1 second
    {
        //Reset iteratior
        _notFlying = 0;

        //Zero gyro
        _freeIMU.zeroGyro();

        //Reset I
        _yawRatePIDController->reset();
        _pitchRatePIDController->reset();
        _rollRatePIDController->reset();
        _yawStabPIDController->reset();
        _pitchStabPIDController->reset();
        _rollStabPIDController->reset();
    }
} 

//Set motor power
_motor1.write(_motorPower[0]);
_motor2.write(_motorPower[1]);
_motor3.write(_motorPower[2]);
_motor4.write(_motorPower[3]);
}

我的程序可以在

问题在于flightController.h。我想我应该清楚我想做什么,但如果有人不确定,请告诉我

我还有另一个完全无关的问题。我可以通过串行设置PID变量,然后将它们保存到配置文件中,但如果在将数据保存到文件后立即挂起,则三分之一挂起,我不确定原因。有人知道这是什么原因吗


谢谢Joe,我忘了在函数的参数中添加void const*n,函数的参数在顶部定义

void Task50Hz(void const *n)
{
//Get RC control values

//Constrain
//Rate mode
if(_rate == true && _stab == false)
{
    _rcConstrainedCommands[0] = Constrain(_rcCommands[0], RC_YAW_RATE_MIN, RC_YAW_RATE_MAX);
    _rcConstrainedCommands[1] = Constrain(_rcCommands[1], RC_PITCH_RATE_MIN, RC_PITCH_RATE_MAX);
    _rcConstrainedCommands[2] = Constrain(_rcCommands[2], RC_ROLL_RATE_MIN, RC_ROLL_RATE_MAX);
    _rcConstrainedCommands[3] = Constrain(_rcCommands[3], RC_THRUST_MIN, RC_THRUST_MAX);
}
else
{
    _rcConstrainedCommands[0] = Constrain(_rcCommands[0], RC_YAW_RATE_MIN, RC_YAW_RATE_MAX);
    _rcConstrainedCommands[1] = Constrain(_rcCommands[1], RC_PITCH_ANGLE_MIN, RC_PITCH_ANGLE_MAX);
    _rcConstrainedCommands[2] = Constrain(_rcCommands[2], RC_ROLL_ANGLE_MIN, RC_ROLL_ANGLE_MAX);
    _rcConstrainedCommands[3] = Constrain(_rcCommands[3], RC_THRUST_MIN, RC_THRUST_MAX);
}
}