0% ont trouvé ce document utile (0 vote)
104 vues5 pages

TP STR

Ce document présente cinq exercices sur les systèmes temps réel utilisant FreeRTOS sur Arduino. Les exercices explorent la création et l'ordonnancement de tâches, la communication entre tâches, et la suspension et réactivation de tâches.

Transféré par

mahjoubi Rabie
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
104 vues5 pages

TP STR

Ce document présente cinq exercices sur les systèmes temps réel utilisant FreeRTOS sur Arduino. Les exercices explorent la création et l'ordonnancement de tâches, la communication entre tâches, et la suspension et réactivation de tâches.

Transféré par

mahjoubi Rabie
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd

Institut supérieure des études technologique de JENDOUBA

Travaux pratiques

Système temps réel

Année universitaire 23/24

1
Exercice 1 :

En regardant la vidéo sur YouTube commenter le programme suivant :

#include <Arduino_FreeRTOS.h>

//Print to serial monitor with two tasks


void Task_Print1(void *param);
void Task_Print2(void *param);
TaskHandle_t Task_Handle1;
TaskHandle_t Task_Handle2;

void setup() {
Serial.begin(9600);
xTaskCreate(Task_Print1, "Task1", 100, NULL, 1, &Task_Handle1);
xTaskCreate(Task_Print2, "Task2", 100, NULL, 1, &Task_Handle2);
}

void loop() {
// don't put code here:
}

void Task_Print1(void *param) {


(void)param;
while (1) {
Serial.println("Task1");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

void Task_Print2(void *param) {


(void)param;
while (1) {
Serial.println("Task2");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

1- Visualiser le code sur le monitor de l’IDE Arduino

2- Changer l’ordre de priorité de la deuxième tache et commenter.

1
Exercice 2 :

1- Expliquer d’après la vidéo le code suivant.

#include <Arduino_FreeRTOS.h>

void Task_Controlled(void *param);


void Task_Print(void *param);
TaskHandle_t Task_Handle1;
TaskHandle_t Task_Handle2;

void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
pinMode(8,INPUT_PULLUP);
xTaskCreate(Task_Controlled, "Task1", 100, NULL, 1, &Task_Handle1);
xTaskCreate(Task_Print, "Task2", 100, NULL, 1, &Task_Handle2);
}

void loop() {
// don't put code here:
}

void Task_Controlled(void *param) {


(void) param;
while (1) {
if(digitalRead(8)==0)
{
while(digitalRead(8)==0)
digitalWrite(13,LOW);
}
else digitalWrite(13, HIGH);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

void Task_Print(void *param) {


(void) param;
while (1) {
Serial.println("Taskprint");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

2- Réaliser le montage avec la carte Arduino et conclure.

1
Exercice 3 :

1- Ecrire et exécuter le code suivant.

void setup() {
Serial.begin(9600);
pinMode(8, INPUT_PULLUP);
pinMode(13, OUTPUT);
}

void loop() {
if(digitalRead(8)==0)
{
while(digitalRead(8)==0)
digitalWrite(13, LOW);
}
else
digitalWrite(13, HIGH);
Serial.println("PRINTLN");
delay(1000);
}

2- Comparer le résultat du code avec le précédent.

1
Exercice 4 :

1- Expliquer le programme suivant.

#include <Arduino_FreeRTOS.h>

void Task_Print1(void *param);


void Task_Print2(void *param);
TaskHandle_t Task_Handle1;
TaskHandle_t Task_Handle2;
int counter = 0;
void setup() {
Serial.begin(9600);
xTaskCreate(Task_Print1, "Task1", 100, NULL, 1, &Task_Handle1);
xTaskCreate(Task_Print2, "Task2", 100, NULL, 1, &Task_Handle2);
}

void loop() {
// don't put code here:
}

void Task_Print1(void *param) {


(void)param;
while (1) {
Serial.println("Task1");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

void Task_Print2(void *param) {


(void)param;
while (1) {
counter++;
Serial.println("Task2");
if(counter==10)
{
vTaskDelete(Task_Handle2);
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

Exercice 5 :

Ecrire le programme nécessaire en suivant la vidéo de suspension et réactivation d’une


tache (suspend and resume).

Vous aimerez peut-être aussi