コード例 #1
0
task main()
{
	clearDebugStream();
	writeDebugStreamLine("This is PIDTest\n");
	memset(&desiredEncVals, 0, sizeof(desiredEncVals));
	motorInit(&desiredEncVals);
	semaphoreInitialize(PIDconstantSemaphore);

	startTask(PID);

	long loopStartTimeMs = nPgmTime;

	semaphoreLock(PIDconstantSemaphore);

	for (pid_kp=0; pid_kp<5; pid_kp++) {
		for (pid_ki=0; pid_ki<0; pid_ki+=0.01) {
			for (pid_kd=0; pid_kd<0; pid_kd++) {
				writeDebugStream("%f, %f, %f, ", pid_kp, pid_ki, pid_kd);

				if (bDoesTaskOwnSemaphore(PIDconstantSemaphore)) {
    			semaphoreUnlock(PIDconstantSemaphore);
    		}

  			while(motorGetEncoder((tMotor) MecMotor_FR) < 5000){
					hogCPU();

					motorUpdateState();
					desiredMotorVals.power[MecMotor_FR] = 50;

					releaseCPU();
				}

				semaphoreLock(PIDconstantSemaphore);
				motor[MecMotor_FR] = 0; //can do this because we have lock on semaphore
				writeDebugStream("Changing constants!\n");
				wait1Msec(1000); //wait for motor to spin down
			}
		}
	}
}
コード例 #2
0
void CMrcpTaskProcessor::ProcessTasks()
{
   Name("ProcessTasks");
	MrcpTasks* l_task;
   boost::mutex::scoped_lock semaphoreLock( m_semaphoreMutex);

   std::string l_statusInfo = "Entering Processing Thread: " + m_idString;
   CLogger::Instance()->Log( LOG_LEVEL_INFO, *this, l_statusInfo);

   { // scope for lock
      boost::mutex::scoped_lock l_controlLock( m_controlMutex);
      EventProcessorRunning(true);
   }
   while( EventProcessorRunning())
   {
      if ( m_queue.empty())
      {
         m_semaphore.wait(semaphoreLock);
      }

      {  // scope for lock
         boost::mutex::scoped_lock l_queueLock( m_queueMutex);
         if ( !m_queue.empty ())
         {
            l_task = m_queue.front();
            m_queue.pop();
         }
         else
         {
            continue;
         }
      }

      try
      {
         l_task->Execute();
      }
      catch(...)
      {
	 std::string l_debugInfo = "Caught Exception! debug info: " + MrcpUtils::itos((int)l_task->m_signalObj);
         CLogger::Instance()->Log( LOG_LEVEL_ERROR, *this, "ProcessTasks", l_debugInfo);
      }
      delete l_task;
   }
   std::string l_stat2Info = "Exiting Processing Thread: " + m_idString;
   CLogger::Instance()->Log( LOG_LEVEL_INFO, *this, l_stat2Info);
}