Filière : DUT SYSTÈMES EMBARQUÉS 2ème ANNEE Elément de Module M9.1 : LES NOYAUX EMBARQUÉS EVALUATION PRATIQUE v1 1. PRESENTATION DU SYSTÈME EMBARQUE A REALISER : Le travail demandé consistera à réaliser 4 tâches permettant de superviser et de commander un système embarqué représenté par la figure suivante : Une LED rouge commandée par le pin D12 ; Un bouton poussoir BP1 connecté au pin D2 via une résistance Pull Down ; Un capteur de lumière LDR connecté à l'entrée analogique A0. 2. TRAVAIL LOGICIEL A REALISER : Les 4 tâches qui doivent être crées sont les suivantes : "Lum_Task" qui permet l'acquisition de la valeur de la luminosité (valeur numérique entre 0 et 1023) ; "Print_Task" qui permet d'afficher l'état du bouton poussoir (appuyé ou non) dans le moniteur série ; "LED_Task" qui permet de faire allumer la LED rouge pendant une durée qui est envoyée comme paramètre à la tâche. "BP_Task" qui permet de Lire l'état du bouton poussoir BP1. Il y aura aussi la création de 2 objets freeRTOS permettant la synchronisation et la communication entre ces tâches, à savoir : Une file d'attente "Data_BP" (Taille : 2 et type de donnée : int) qui permettra d'envoyer l'état du bouton poussoir BP1 lu par la tâche " BP_Task " vers la tâche "Print_Task" pour qu'il soit afficher ; Une sémaphore binaire "Sem_Lum" permettant de synchroniser les 2 tâches "Lum_Task" et "LED_Task". Ainsi, l'allumage de la LED (pendant une durée fixée par paramètre) ne pourra avoir lieu que si la luminosité descend en dessous du seuil 450. NOTES À PRENDRE EN COMPTE : L'initialisation des pins utilisés ainsi que de l'interface de communication série (9600 bauds) se fera au niveau de la procédure Arduino "Setup" ; La tâche la plus prioritaire sera "Lum_Task", suivie de la tâche "BP_Task", puis viennent les 2 tâches restantes qui auront toutes les deux le même niveau de priorité. ESTF - HANAFI AHMED 1 Filière : DUT SYSTÈMES EMBARQUÉS 2ème ANNEE Elément de Module M9.1 : LES NOYAUX EMBARQUÉS EVALUATION PRATIQUE v1 AIDE MÉMOIRE FREERTOS 1. API NATIF ARDUINO IDE : Serial.begin(Value) Serial.print(Value) Serial.println() pinMode(pin, Mode) int N = analogRead(pin) digitalRead(pin, Value) delay(value_ms) 2. LES TÂCHES : #include <Arduino_FreeRTOS.h> xTaskCreate(TaskCode , TaskName , Pile, parameter, priorité, TaskHandle) 3. LES SÉMAPHORES : #include <semphr.h> SemaphoreHandle_t SemT1 SemT1 = xSemaphoreCreateBinary() xSemaphoreTake(SemT1, portMAX_DELAY) ; xSemaphoreGive(SemT1) ; 4. LES LISTES D'ATTENTE : #include <queue.h> QueueHandle_t file_1 file_1 = xQueueCreate (Queue_Length, Item_Size) xQueueSend (file_1, &Value, portMAX_DELAY ) xQueueReceive (file_1, &Value, portMAX_DELAY) ESTF - HANAFI AHMED 2 Filière : DUT SYSTÈMES EMBARQUÉS 2ème ANNEE Elément de Module M9.1 : LES NOYAUX EMBARQUÉS EVALUATION PRATIQUE v1 Nom : …………………………………………. Prénom : ……………………………………..;. PROGRAMME A COMPLETER // Bibliothèques à inclure …………………………………………………………………. …………………………………………………………………. …………………………………………………………………. /*---------------------- Tâches ---------------------*/ void Blink_Task( void *pvParameters ) { // Récupération du paramètre void Lum_Task( void *pvParameters ); ……………………………………………………………………………. void Print_Task( void *pvParameters ); // Eteindre la LED initialement void _Task( void *pvParameters ); void BP_Task( void *pvParameters ); int Etat_LED = LOW; // Paramètre à transmettre à la tâche Blink_Task() digitalWrite(……………… , Etat_LED); while(1) int Delay_Blink = 3; { …………………………………………………………………. if (……………………………………………………………………….………..) …………………………………………………………………. { void setup() { // Initialisation digitalWrite(……………. , Etat_LED); …………………………………………………………………. vTaskDelay(1); delay(……… * 100); …………………………………………………………………. …………………………………………………………………. // Création des sémaphores, files d'attentes et tâches …………………………………………………………………………………….. …………………………………………………………………………………….. …………………………………………………………………………………….. …………………………………………………………………………………….. void BP_Task(void *pvParameters) { int Etat_BP; while(1) { …………………………………………………………………………………….. …………………………………………………………………………………….. // Lire l'état du bouton poussoir ………………………………………………………………………. if (………………………………………………..) { void loop() { } } } ESTF - HANAFI AHMED } } } …………………………………………………………………………………….. } Etat_LED = !Etat_LED; } …………………………………………………………………. vTaskDelay(1); 3 Filière : DUT SYSTÈMES EMBARQUÉS 2ème ANNEE Elément de Module M9.1 : LES NOYAUX EMBARQUÉS EVALUATION PRATIQUE v1 Nom : …………………………………………. Prénom : ……………………………………..;. PROGRAMME A COMPLETER /*---------------------- Tâches ---------------------*/ void Lum_Task(void *pvParameters) { ……………………………………………. while(1) { …………………………………………………………………………………. ………………………………………………………………………………… ……………………………………………………………………………….. } } ………………………………………………………………………………. void Print_Task(void * pvParameters) { …………………………………………….. while(1) { …………………………………………………………………………………. ………………………………………………………………………………… ……………………………………………………………………………….. …………………………………………………………………………………. ………………………………………………………………………………… ……………………………………………………………………………….. …………………………………………………………………………………. ……………………………………………………………………………….. } } ………………………………………………………………………………… ESTF - HANAFI AHMED 4