Tehnici avansate: Stăpânești funcționalități esențiale C pentru proiecte embedded, de la internalele linker-ului la state machines.
Hands-on cu tablouri, pointeri, modele OOP în C și concepte avansate de embedded (focalizare pe AVR).
Explorezi evoluția standardelor C și impactul construcțiilor noi asupra codului embedded.
Dobândești experiență practică prin laboratoare (~70%) care reflectă proiecte reale.
Cum te ajută acest curs: Vei construi software embedded robust, portabil și eficient.
Cui i se adresează: conceput pentru persoane cu experiență anterioară în C care doresc să își aprofundeze expertiza embedded.
La final vei implementa cu încredere sisteme complexe în C, de la ISR-uri la design low-power.
Curriculum
C esențial
- Rolul linker-ului (în detaliu)
- Contextul de execuție pentru aplicații
- Formate ABI
- Capcane de promovare și overflow
- Pointers
- Lucrul cu tablouri multidimensionale
- Capcane la tablouri și C strings
- Tipuri de date complexe
- Inlining – revizitat
- Probleme de portabilitate și soluții
- Undefined behaviors
Metode OOP în C
- Constructori și destructori și cum sunt susținuți de toolchain
- "Virtual methods" în C și avantaje
- "Inheritance" și "polymorphism"
- Îmbunătățiri de performanță
State machines făcute corect
- Reprezentarea stării (enum, function pointers)
- Tabele de tranziție și gărzi
- State machines ierarhice (HSM)
- Arhitectură event-driven pentru sisteme embedded
Evoluția limbajului C
- Construcții mai noi (keywords, trigraphs, digraphs)
- C11 _Generic și macro-uri type-generic
- Actualizări C11/C18 relevante pentru embedded
Gestionarea argumentelor variabile
- Bazele varargs
- Considerații de securitate (format-string, limite, undefined behavior)
Programare embedded (focalizare AVR)
- Prezentare arhitectură AVR (memorie, CPU)
- Registre importante și moduri de adresare
- Instrucțiuni AVR cheie
- Timers
- I/O ports
- ADC
- PWM
- Interrupt handling
- AVR interrupts și vectorul de întreruperi
- Scrierea ISR-urilor: ce să faci / ce să eviți, exemple
- Funcții deferabile și lucru amânat
- Managementul timpului cu timere
- Modele de operare pentru timere
- Noțiuni de bază RTOS
- Scheduling: threads, context switching, tipuri de schedulere
- Implementarea unui task scheduler pentru momente precise
- Mutexes (tipuri, robust vs. non-robust, policy)
- Elemente MMU
- I/O hardware: magistrale și porturi
- Recapitulare registre (GPIO/ADC/PWM/Watchdog)
- Power management și stări de putere ale sistemului
Embedded C avansat (extra)
- C11 atomics vs. volatile; memory order și pattern-uri lock-free (unde se aplică)
- Ring buffers pentru comunicare ISR ⇄ main (single-producer/single-consumer)
- Noțiuni DMA și zero-copy I/O (unde există suport)
- Linker scripts și secțiuni de memorie (.text/.data/.bss/.rodata, plasare custom)
- Startup code și secvența de boot (reset vector, crt0, ordinea inițializării)
- Latența întreruperilor, secțiuni critice și determinism
- Scheduling fără tick și timere cu jitter redus
- Aritmetică pe numere fixe și aritmetică cu saturație
- Prezentare MISRA C și gestionarea abaterilor (deviations)
- Testare pe ținte embedded: Unity/CMock, fakes și HIL
- Strategii de abstractizare: HAL vs. acces la registre; configurare la compile-time
- Design low-power: moduri de sleep, clock gating, surse de trezire
Structura zilei de curs
- Partea 1: 09:00–10:30
- Pauză: 10:30–10:45
- Partea 2: 10:45–12:15
- Pauză de prânz: 12:15–13:15
- Partea 3: 13:15–15:15
- Pauză: 15:15–15:30
- Partea 4: 15:30–17:30