Projet Drone de surveillance du labo TRSE (INGESUP)
Dependencies: mbed PID ADXL345 Camera_LS_Y201 ITG3200 RangeFinder mbos xbee_lib Motor Servo
Revision 33:f85d47baaeb4, committed 2013-04-27
- Comitter:
- Gaetan
- Date:
- Sat Apr 27 11:29:23 2013 +0000
- Parent:
- 31:ec7d635636bf
- Parent:
- 32:74608bce78f6
- Child:
- 34:4466839f5bb7
- Commit message:
- Un exemple d'utilisation de l'os est ajout? (avec commentaire).
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Librairies/mbos.lib Wed Apr 17 15:52:51 2013 +0000 +++ b/Librairies/mbos.lib Sat Apr 27 11:29:23 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/AndrewL/code/mbos/#cf660b28b2a4 +https://mbed.org/users/AndrewL/code/mbos/#cf660b28b2a4
--- a/main.cpp Wed Apr 17 15:52:51 2013 +0000 +++ b/main.cpp Sat Apr 27 11:29:23 2013 +0000 @@ -17,76 +17,85 @@ * Output */ -/*#include "mbed.h" -#include "mbos.h" -DigitalOut myled(LED1); - -int main() { - while(1) { - myled = 1; - wait(0.2); - myled = 0; - wait(0.2); - - //modification - } -}*/ #include "mbed.h" #include "mbos.h" #include "Module_Communication.h" - -#define TASK1_ID 1 // Id for task 1 (idle task is 0) -#define TASK1_PRIO 50 // priority for task 1 -#define TASK1_STACK_SZ 32 // stack size for task 1 in words -#define TASK2_ID 2 // Id for task 2 -#define TASK2_PRIO 60 // priority for task 2 -#define TASK2_STACK_SZ 32 // stack size for task 2 in words -#define TIMER0_ID 0 // Id for timer 0 -#define TIMER0_PERIOD 1000 // Time period in milliseconds -#define TIMER0_EVENT 1 // Event flag (1 << 0) -#define T1_TO_T2_EVENT 2 // Event flag (1 << 1) +#include "os.h" void task1(void); // task function prototypes void task2(void); DigitalOut led1(LED1); DigitalOut led2(LED2); -mbos os(2, 1); // Instantiate mbos with 2 tasks & 1 timer +DigitalOut led3(LED3); +mbos os(2, 2); // Instantiate mbos with 7 tasks & 7 timer + int main(void) { -/* - // Configure tasks and timers - os.CreateTask(TASK1_ID, TASK1_PRIO, TASK1_STACK_SZ, task1); - os.CreateTask(TASK2_ID, TASK2_PRIO, TASK2_STACK_SZ, task2); - os.CreateTimer(TIMER0_ID, TIMER0_EVENT, TASK1_ID); + + //exemple d'utilisation du système d'exploitation : + + // 1 création des tâches + os.CreateTask(TASK_COM, TASK_COM_PRIO, TASK_COM_STACK_SZ, task1); + os.CreateTask(TASK_DETEC, TASK_DETEC_PRIO, TASK_DETEC_STACK_SZ, task2); + /*os.CreateTask(TASK_MOUV, TASK_MOUV_PRIO, TASK_MOUV_STACK_SZ, task1); + os.CreateTask(TASK_TRAJ, TASK_TRAJ_PRIO, TASK_TRAJ_STACK_SZ, task2); + os.CreateTask(TASK_BATT, TASK_BATT_PRIO, TASK_BATT_STACK_SZ, task1); + os.CreateTask(TASK_VIDEO, TASK_VIDEO_PRIO, TASK_VIDEO_STACK_SZ, task2); + os.CreateTask(TASK_ARRET_URGENT, TASK_ARRET_URGENT_PRIO, TASK_ARRET_URGENT_STACK_SZ, task1);*/ + + os.CreateTimer(TIMER_COM_ID, TASK_COM, TIMER_EVENT); + os.CreateTimer(TIMER_DETEC_ID, TASK_DETEC, TIMER_EVENT); + /*os.CreateTimer(TIMER_MOUV_ID, TIMER_MOUV_PERIOD, TIMER_MOUV_EVENT); + os.CreateTimer(TIMER_BATT_ID, TIMER_BATT_PERIOD, TIMER_BATT_EVENT); + os.CreateTimer(TIMER_VIDEO_ID, TIMER_VIDEO_PERIOD, TIMER_VIDEO_EVENT); + os.CreateTimer(TIMER_ARRET_URGENT_ID, TIMER_ARRET_URGENT_PERIOD, TIMER_ARRET_URGENT_EVENT);*/ + // Start mbos os.Start(); // never return! - */ - C_ModuleCommunication com = C_ModuleCommunication(); - com.receptionDeTrame(); + + /*C_ModuleCommunication com = C_ModuleCommunication(); + com.receptionDeTrame();*/ } + + /* Exemple de point d'entré associée a une tâche. + * + * Attention : le point d'entré d'une tâche ne doit pas être une methode membre d'un objet. + * En effet, le point d'entré doit être considéré de la même manière qu'un "void main(void)" + * Au début du point d'entré l'objet peut être instancié. + * + */ + void task1(void) { - os.SetTimer(TIMER0_ID, TIMER0_PERIOD, TIMER0_PERIOD); + os.SetTimer(TIMER_COM_ID, TIMER_COM_PERIOD, TIMER_COM_PERIOD); while(1){ - os.WaitEvent(TIMER0_EVENT); + os.WaitEvent(TIMER_EVENT); led1 = !led1; - os.SetEvent(T1_TO_T2_EVENT, TASK2_ID); + os.SetEvent(COMMUNICATION_EVENT, TASK_DETEC); } } void task2(void) { + os.SetTimer(TIMER_DETEC_ID, TIMER_DETEC_PERIOD, TIMER_DETEC_PERIOD); while(1){ - os.WaitEvent(T1_TO_T2_EVENT); - led2 = 1; - wait_ms(100); - led2 = 0; + os.WaitEvent(TIMER_EVENT | COMMUNICATION_EVENT); //Attention : la methode WaitEvent réinitialise les évènements à 0 + /*switch(os.GetEvent()){ // Avec un switch on ne traite qu'un seul évènement reçu. Il y a risque de ne pas traiter tous les évènements reçus. + case TIMER_EVENT: + led2 = !led2; + break; + case COMMUNICATION_EVENT: + led3 = !led3; + break; + }*/ + //Le Test de chaque flag d'évènement permet de tous les traiter. Au maximum, une tâche peut ainsi traiter 8 évènement, correspondant à chaque flag d'un octet + + if(os.GetEvent() & TIMER_EVENT) led2 = !led2; + if(os.GetEvent() & COMMUNICATION_EVENT) led3 = !led3; } } -/*@endcode - */ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os.h Sat Apr 27 11:29:23 2013 +0000 @@ -0,0 +1,72 @@ +/* Copyright (c) 2012 - 2013 Gaëtan PLEYBER + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + /* + * Description + * Input + * Output + */ + + +#define TASK_COM 1 // Id for task 1 (idle task is 0) +#define TASK_COM_PRIO 50 // priority for task 1 +#define TASK_COM_STACK_SZ 32 // stack size for task 1 in words +#define TIMER_COM_ID 0 // Id for timer 0 +#define TIMER_COM_PERIOD 1000 // Time period in milliseconds + +#define TASK_DETEC 2 +#define TASK_DETEC_PRIO 30 +#define TASK_DETEC_STACK_SZ 32 +#define TIMER_DETEC_ID 1 +#define TIMER_DETEC_PERIOD 1500 + + +#define TASK_VIDEO 3 +#define TASK_VIDEO_PRIO 50 +#define TASK_VIDEO_STACK_SZ 32 +#define TIMER_VIDEO_ID 2 +#define TIMER_VIDEO_PERIOD 1000 + + +#define TASK_BATT 4 +#define TASK_BATT_PRIO 50 +#define TASK_BATT_STACK_SZ 32 +#define TIMER_BATT_ID 3 +#define TIMER_BATT_PERIOD 1000 + + +#define TASK_MOUV 5 +#define TASK_MOUV_PRIO 50 +#define TASK_MOUV_STACK_SZ 32 +#define TIMER_MOUV_ID 4 +#define TIMER_MOUV_PERIOD 1000 + + +#define TASK_TRAJ 6 +#define TASK_TRAJ_PRIO 50 +#define TASK_TRAJ_STACK_SZ 32 +#define TIMER_TRAJ_ID 5 +#define TIMER_TRAJ_PERIOD 1000 + + +#define TASK_ARRET_URGENT 7 +#define TASK_ARRET_URGENT_PRIO 50 +#define TASK_ARRET_URGENT_STACK_SZ 32 +#define TIMER_ARRET_URGENT_ID 6 +#define TIMER_ARRET_URGENT_PERIOD 1000 + + +#define TIMER_EVENT 1 // Event flag = 0000 0001 +#define COMMUNICATION_EVENT 2 // Event flag = 0000 0010 +#define COMMANDE_EVENT 4 // Event flag = 0000 0100 +#define DETECTION_EVENT 8 // Event flag = 0000 1000