Lab 2.2 Sisteme de Operare - FreeRTOS
Lucrare de laborator Nr. 2.2: Sisteme de Operare Preemptive – FreeRTOS
Scopul lucrării
Realizarea unei aplicații modulare pentru un microcontroler (MCU) utilizând FreeRTOS, care să ruleze secvențial cel puțin 3 task-uri și să demonstreze metodologia de planificare, sincronizare și execuție a task-urilor în timp real.
Obiectivele lucrării
- Familiarizarea cu principiile de planificare și execuție a task-urilor într-un sistem embedded utilizând FreeRTOS.
- Implementarea mecanismelor de sincronizare între task-uri folosind semafoare.
- Utilizarea unui buffer pentru comunicarea între task-uri în model provider/consumer.
- Aplicarea corectă a recurentei și offset-urilor între task-uri pentru optimizarea utilizării resurselor procesorului.
- Documentarea arhitecturii software și prezentarea schemelor bloc și schemelor electrice, ca parte integrantă a metodologiei de proiectare.
Definire Problemă
Realizarea unei aplicații pentru MCU care va rula minim 3 task-uri utilizând FreeRTOS:
- Button Led – Va aprinde un led timp de 1 SEC LED la detectarea unei apăsări pe buton. Task-ul va ridica un semafor și va avea recurența de 10 ms.
- Task Sincron – Va aștepta ridicarea semaforului de la primul task, va incrementa o variabilă (
N = N + 1
) și va trimite în buffer o serie deN
bytes (1,2,3,..N), la un interval de 50 ms. Dupa care, va controla un LED care va clipi de N ori, cu faza ON - 300 ms, OFF - 500 ms. - Task Asincron – Va citi la fiecare 200 ms bufferul și va afișa octeții citiți în terminal prin STDIO. La detectarea unui
0
, se va trece pe un rând nou. (a se organiza o formatare informativa a mesajelor), se poate utiliza si LCD in acest scop
Indicații pentru implementare
-
Asigurarea recurentei pentru Task 1
- Se va utiliza
xTaskDelayUntil(delay)
în bucla infinită pentru respectarea perioadei de 10 ms.
- Se va utiliza
-
Sincronizarea Task 1 și Task 2
- Se va utiliza un semafor binar:
- Task 1 va utiliza
xSemaphoreGive()
pentru a semnaliza apăsarea butonului. - Task 2 va utiliza
xSemaphoreTake()
pentru a detecta schimbarea de stare și a iniția execuția sa.
- Task 1 va utiliza
- Se va utiliza un semafor binar:
-
Comunicarea între Task 2 și Task 3 folosind bufferul
- Task 2 (provider) va stoca datele într-un buffer global, utilizând
xQueueSendToFront()
- Task 3 (consumer) va citi datele din buffer folosind
xQueueReceive()
. și le va afișa pe terminalul serial.
- Task 2 (provider) va stoca datele într-un buffer global, utilizând
-
Pauze și controlul temporizării
- Se va folosi
xTaskDelay(delay)
pentru a intervalele de timp in cadrul tascurilor unde e cazul.
- Se va folosi
Materiale și Resurse
Componente hardware
- Microcontroler (ESP32, STM32 sau Arduino cu suport FreeRTOS)
- LED-uri
- Rezistor de 220Ω
- Butoane (minim 1, pentru funcționalitatea specificată)
- Breadboard
- Cabluri de conexiune (jumper wires)
- Sursă de alimentare (USB)
Resurse software
- Visual Studio Code cu extensia PlatformIO instalată
- Biblioteca FreeRTOS
- Emulator terminal (ex.: Monitor Serial din PlatformIO, TeraTerm sau Putty)
- Simulator hardware (opțional, ex.: Proteus)
Recomandări
- Utilizarea unui IDE cu suport Arduino (de exemplu, Eclipse sau VS Code cu PlatformIO) pentru gestionarea proiectelor modulare.
- Validarea codului printr-un simulator hardware (ex.: Proteus) înainte de testarea pe hardware real.
- Implementarea funcționalităților pentru fiecare periferic (LED, buton, buffer etc.) în fișiere separate pentru a facilita reutilizarea.
- Respectarea convențiilor de codare (
CamelCase
,snake_case
) și documentarea detaliată a soluției.
Cerințe obligatorii:
- Respectarea structurii modulare a proiectului.
- Prezentarea schițelor arhitecturale, schemelor bloc și schemelor electrice.
- Respectarea formatului raportului conform normelor UTM.
Pontaj
- Nu se accepta rapoartele care nu corespund cerintelor de prezentare
- 50% Prezentarea simpla a functionarii sistemului elaborat.
- 10% Explicarea semafoarelor și bufferului pentru sincronizare între task-uri
- 10% Explicarea interfeței hardware-software a stackurilor periferiilor și metodologia implementată
- 10% Prezentarea schemelor electrice si diagramelor scheme bloc SW
- 10% Demonstrarea funcționării fizice a soluției
- 10% Implementarea unui comportamnet improvizat aditional cu utilizare servicii FreeRTOS (de ex cu utlizare mutex-uri)
NOTĂ: Pontajul maxim este posibil doar la prezentarea funcționării fizice a soluției!, SI implementare a unui comportament aditional improvizat
- Penalizare: -10% pentru fiecare săptămână întârziere de la deadline.