diff --git a/software/raspberry/superviseur-robot/tasks.cpp b/software/raspberry/superviseur-robot/tasks.cpp index aa72b9f..3be95f9 100644 --- a/software/raspberry/superviseur-robot/tasks.cpp +++ b/software/raspberry/superviseur-robot/tasks.cpp @@ -24,10 +24,9 @@ #define PRIORITY_TMOVE 20 #define PRIORITY_TSENDTOMON 22 #define PRIORITY_TRECEIVEFROMMON 25 -#define PRIORITY_TSTARTROBOTWITHOUTWATCHDOG 20 -#define PRIORITY_TSTARTROBOTWITHWATCHDOG 20 +#define PRIORITY_TSTARTROBOTWITHOUTWATCHDOG 22 +#define PRIORITY_TSTARTROBOTWITHWATCHDOG 22 #define PRIORITY_TCAMERA 21 -#define PRIORITY_TBATTERY 31 /* @@ -104,10 +103,6 @@ void Tasks::Init() { cerr << "Error semaphore create: " << strerror(-err) << endl << flush; exit(EXIT_FAILURE); } - if (err = rt_sem_create(&sem_askBattery, NULL, 0, S_FIFO)) { - cerr << "Error semaphore create: " << strerror(-err) << endl << flush; - exit(EXIT_FAILURE); - } cout << "Semaphores created successfully" << endl << flush; /**************************************************************************************/ @@ -141,10 +136,7 @@ void Tasks::Init() { cerr << "Error task create: " << strerror(-err) << endl << flush; exit(EXIT_FAILURE); } - if (err = rt_task_create(&th_askBattery, "th_askBattery", 0, PRIORITY_TBATTERY, 0)) { - cerr << "Error task create: " << strerror(-err) << endl << flush; - exit(EXIT_FAILURE); - } + cout << "Tasks created successfully" << endl << flush; /**************************************************************************************/ @@ -193,10 +185,6 @@ void Tasks::Run() { cerr << "Error task start: " << strerror(-err) << endl << flush; exit(EXIT_FAILURE); } - if (err = rt_task_start(&th_askBattery, (void(*)(void*)) & Tasks::Ask_Battery, this)) { - cerr << "Error battery start: " << strerror(-err) << endl << flush; - exit(EXIT_FAILURE); - } cout << "Tasks launched" << endl << flush; } @@ -291,7 +279,8 @@ void Tasks::ReceiveFromMonTask(void *arg) { if (msgRcv->CompareID(MESSAGE_MONITOR_LOST)) { delete(msgRcv); - exit(-1); + //exit(-1); + } else if (msgRcv->CompareID(MESSAGE_ROBOT_COM_OPEN)) { rt_sem_v(&sem_openComRobot); } else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITHOUT_WD)) { @@ -360,7 +349,7 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { /* The task startRobot starts here */ /**************************************************************************************/ while (1) { - int err; + Message* p_mess_answer_battery; Message * msgSend; rt_sem_p(&sem_startRobotWithoutWatchdog, TM_INFINITE); cout << "Start robot without watchdog ("; @@ -377,11 +366,16 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); robotStarted = 1; rt_mutex_release(&mutex_robotStarted); - rt_task_set_periodic(NULL, TM_NOW, 5000000000); + rt_task_set_periodic(NULL, TM_NOW, 3000000000); while (1) { rt_task_wait_period(NULL); - rt_sem_v(&sem_askBattery); - + rt_mutex_acquire(&mutex_robot, TM_INFINITE); + p_mess_answer_battery = robot.Write(robot.GetBattery()); + rt_mutex_release(&mutex_robot); + rt_mutex_acquire(&mutex_monitor, TM_INFINITE); + monitor.Write(p_mess_answer_battery); + rt_mutex_release(&mutex_monitor); + cout << endl << flush; } } } @@ -403,6 +397,7 @@ void Tasks::StartRobotTaskWithWatchdog(void *arg) { /* The task startRobot starts here */ /**************************************************************************************/ while (1) { + Message* p_mess_answer_battery; Message * msgSend; int cpt=1; int err; @@ -422,13 +417,21 @@ void Tasks::StartRobotTaskWithWatchdog(void *arg) { rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); robotStarted = 1; rt_mutex_release(&mutex_robotStarted); - rt_task_set_periodic(NULL, TM_NOW, 5000000000); + rt_task_set_periodic(NULL, TM_NOW, 300000000); while (1) { cpt++; rt_task_wait_period(NULL); + rt_mutex_acquire(&mutex_robot, TM_INFINITE); robot.Write(robot.ReloadWD()); + rt_mutex_release(&mutex_robot); if(cpt%10==0){ - rt_sem_v(&sem_askBattery); + rt_mutex_acquire(&mutex_robot, TM_INFINITE); + p_mess_answer_battery = robot.Write(robot.GetBattery()); + rt_mutex_release(&mutex_robot); + rt_mutex_acquire(&mutex_monitor, TM_INFINITE); + monitor.Write(p_mess_answer_battery); + rt_mutex_release(&mutex_monitor); + cout << endl << flush; } } } @@ -476,29 +479,6 @@ void Tasks::MoveTask(void *arg) { } -void Tasks::Ask_Battery(void *arg){ - Message* p_mess_answer_battery; - cout << "Start " << __PRETTY_FUNCTION__ << endl << flush; - // Synchronization barrier (waiting that all tasks are starting) - rt_sem_p(&sem_barrier, TM_INFINITE); - - /**************************************************************************************/ - /* The task starts here */ - /**************************************************************************************/ - while(1){ - rt_sem_p(&sem_askBattery, TM_INFINITE); - rt_mutex_acquire(&mutex_robot, TM_INFINITE); - p_mess_answer_battery = robot.Write(robot.GetBattery()); - rt_mutex_release(&mutex_robot); - rt_mutex_acquire(&mutex_monitor, TM_INFINITE); - monitor.Write(p_mess_answer_battery); - rt_mutex_release(&mutex_monitor); - cout << endl << flush; - } -} - - - /** * Write a message in a given queue * @param queue Queue identifier diff --git a/software/raspberry/superviseur-robot/tasks.h b/software/raspberry/superviseur-robot/tasks.h index bd017d5..48ac6dd 100644 --- a/software/raspberry/superviseur-robot/tasks.h +++ b/software/raspberry/superviseur-robot/tasks.h @@ -77,7 +77,6 @@ private: RT_TASK th_startRobotWithoutWatchdog; RT_TASK th_startRobotWithWatchdog; RT_TASK th_move; - RT_TASK th_askBattery; /**********************************************************************/ /* Mutex */ @@ -86,7 +85,6 @@ private: RT_MUTEX mutex_robot; RT_MUTEX mutex_robotStarted; RT_MUTEX mutex_move; - RT_MUTEX mutex_askBattery; /**********************************************************************/ /* Semaphores */ @@ -96,7 +94,6 @@ private: RT_SEM sem_serverOk; RT_SEM sem_startRobotWithoutWatchdog; RT_SEM sem_startRobotWithWatchdog; - RT_SEM sem_askBattery; /**********************************************************************/ /* Message queues */ @@ -142,10 +139,7 @@ private: */ void MoveTask(void *arg); - - - void Ask_Battery(void *arg); - + /**********************************************************************/ /* Queue services */ diff --git a/software/simulateur/nbproject/private/private.xml b/software/simulateur/nbproject/private/private.xml index 2683170..aef7ea3 100755 --- a/software/simulateur/nbproject/private/private.xml +++ b/software/simulateur/nbproject/private/private.xml @@ -6,8 +6,6 @@ - - file:/home/etud/dumber/software/simulateur/main.cpp - +