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:

  1. 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.
  2. 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 de N 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.
  3. 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

  1. Asigurarea recurentei pentru Task 1

    • Se va utiliza xTaskDelayUntil(delay) în bucla infinită pentru respectarea perioadei de 10 ms.
  2. 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.
  3. 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.
  4. Pauze și controlul temporizării

    • Se va folosi xTaskDelay(delay) pentru a intervalele de timp in cadrul tascurilor unde e cazul.

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.