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).