Telechargé par AHMED HANAFI

COLE TP Noyaux Embarqués 2021

publicité
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
Téléchargement