Firmware embedded real-time per macchine di selezione ottica — Panoramica Progetto
Firmware C embedded per SoC FPGA basato su ARM con OS real-time. Combina rilevamenti da 4 telecamere industriali su una linea di selezione ottica. I rilevamenti arrivano via code seriali, vengono combinati tra telecamere in un buffer circolare, valutati tramite regole booleane configurabili, e trasformati in comandi per gli attuatori.
Include anche: libreria C# per compilazione regole e client C# host per diagnostica e logging.
graph TD
subgraph CAM["4 Telecamere Industriali"]
C1["Telecamera 1"] --> Q1["Coda\nRilevamenti"]
C2["Telecamera 2"] --> Q1
C3["Telecamera 3"] --> Q1
C4["Telecamera 4"] --> Q2["Coda\nLocale"]
end
subgraph FW["Firmware Embedded"]
ORCH["Orchestratore"] --> PIPE["Pipeline\nCombinatoria"]
PIPE --> EVAL["Valutazione\nRegole"]
EVAL -->|accettato| OUT["Coda\nOutput"]
EVAL -->|scartato| X["Scarto"]
end
subgraph HOST["Software Host"]
RULES["Compilatore\nRegole"]
DIAG["Diagnostica\ne Logging"]
end
Q1 --> ORCH
Q2 --> ORCH
OUT --> HW["Attuatori"]
RULES -->|"upload"| EVAL
FW -.->|"telemetria"| DIAG
| Categoria | Righe | Test |
|---|---|---|
| Firmware C embedded (7 moduli) | 3.711 | — |
| Test C embedded | 11.217 | 365 |
| Infrastruttura test | 1.163 | — |
| C# compilatore regole (lib + test) | 2.327 | 165 |
| C# client integrazione host | 999 | — |
| Documentazione | 231 | — |
| TOTALE | 19.648 | 530 |
Quanto impiegherebbe un super senior developer embedded C + C# a costruire tutto da zero, scrivendo tutto il codice a mano?
Falsi avvii e rework documentati: ~1.277 righe di codice sono state implementate, testate, e poi cancellate durante l'evoluzione del design. Gli algoritmi chiave hanno attraversato più iterazioni prima di raggiungere la versione finale. Sforzo sprecato stimato: ~5 giorni lavorativi.
20 bug non banali trovati e risolti: race condition, overflow timer (trovati solo su HW reale), problemi di timing comunicazione seriale, memory corruption e bug di confusione tipi. Molti richiedono debug su hardware con oscilloscopio.
| # | Fase | Gg | Perché |
|---|---|---|---|
| 0 | Architettura e Design | 4 | Inventare algoritmi core, formati dati, protocolli di comunicazione. Lavagna, diagrammi, analisi edge case. Creazione dal nulla, non implementazione di una spec. |
| 1 | Setup Ambiente | 2 | Toolchain cross-compilazione, simulazione RTOS, framework test, build system, infrastruttura mock. |
| 2 | Compilatore Regole (C#) | 5 | Parser, AST, ottimizzazione regole, serializzatore binario. Teoria dei compilatori applicata. 165 test, 2.327 righe di codice algoritmico denso. |
| 3 | Pipeline Combinatoria | 8 | Il modulo più complesso. Buffer circolare con combinazione multi-camera, strategie di chiusura multiple, critical section. 3 iterazioni di design. 68 test. |
| 4 | Engine Valutazione Regole | 4 | Evaluator binario con caricamento runtime, valutazione multi-fase con strategie diverse. 41 test. |
| 5 | Elaborazione Output (2 Engine) | 5 | Due engine di valutazione completamente separati con strategie diverse. Condividono quasi zero codice. Multi-output con delay temporali. Come scrivere il modulo due volte. 36 test. |
| 6 | Sistema di Logging | 2.5 | Macchina a stati con ring buffer e protocollo di download robusto. 19 test. |
| 7 | Cattura Diagnostica | 4 | Sistema di cattura multi-stato con download dati massivi ed estrazione regione di interesse 2D. 51 test. |
| 8 | Orchestrazione + Integrazione | 6 | Dove TUTTO deve funzionare insieme. Scheduling real-time, generazione dati sintetici per test, refactoring architettura. L'integrazione è sempre più difficile dei singoli moduli. 87 test. |
| 9 | Client C# Host | 3 | Due client host (~1.000 LOC) che implementano esattamente i protocolli firmware. |
| 10 | Bug Fixing e Hardening | 5 | 20 bug documentati. Race condition, overflow timer, timing comunicazione, memory corruption. Alcuni trovabili solo con oscilloscopio in fabbrica. |
| 11 | Falsi Avvii e Rework | 4 | Funzionalità implementate e rimosse durante l'evoluzione del design. Algoritmi chiave ridisegnati. ~1.277 righe scritte, testate, cancellate. |
| 12 | Documentazione | 1 | Mappe registri, documentazione protocolli, guide integrazione. |
| TOTALE | 53.5 | ~10.5 settimane, ~2.5 mesi |
| Scenario | Giorni | Durata |
|---|---|---|
| Ottimistico (zero problemi HW, primo design funziona) | 42 | ~8.5 settimane (~2 mesi) |
| Realistico (include falsi avvii + debug HW) | 53 | ~10.5 settimane (~2.5 mesi) |
| Con imprevisti (cambio requisiti, HW non disponibile) | 60–65 | ~13 settimane (~3 mesi) |
Il progetto è stato costruito con un AI coding assistant che scriveva ~90% del codice, diretto da un senior developer che ha progettato l'architettura e preso tutte le decisioni. Ruolo umano: architettura, decisioni, prompting, review, test su hardware.
| Periodo | Cosa È Stato Costruito | Ore Stimate |
|---|---|---|
| ~Dic 2025 | Compilatore regole completo (165 test). Implementazione base moduli firmware core. Infrastruttura mock. Setup ambiente. | ~30–35 |
| 20 Dic → 19 Gen | Raffinamento algoritmi, 8 bug fix, refactoring architettura, ottimizzazione performance, iterazioni feature (alcune poi rimosse). | ~25–30 |
| 20 Gen → 23 Gen | Sistema logging, pulizia e semplificazione, rimozione feature sperimentali. Repository creato. | ~15–18 |
| 2 Feb → 4 Feb | Ottimizzazione performance, bug fix, secondo engine di valutazione completo (piano + codice + 18 test in 2h16m!). | ~8–10 |
| 6 Feb | Modulo cattura diagnostica completo in un giorno: firmware + client C# + documentazione + bug fix. 30 test. | ~8 |
| 9 Feb → 11 Feb | Bug fix, integrazione host, estrazione regione di interesse (9 nuovi test). | ~8–10 |
| TOTALE | ~85–100h |
| Fase | Stima (a mano) | Reale (AI) | Speedup |
|---|---|---|---|
| Architettura + Design | 4 gg | ~2 gg | 2x |
| Setup Ambiente | 2 gg | ~0.5 gg | 4x |
| Compilatore Regole (C#) | 5 gg | ~1.5 gg | 3.3x |
| Pipeline Combinatoria | 8 gg | ~2.5 gg | 3.2x |
| Engine Valutazione Regole | 4 gg | ~1 gg | 4x |
| Elaborazione Output (2 engine) | 5 gg | ~1 gg | 5x |
| Sistema Logging | 2.5 gg | ~0.5 gg | 5x |
| Cattura Diagnostica | 4 gg | ~1.5 gg | 2.7x |
| Orchestrazione + Integrazione | 6 gg | ~2 gg | 3x |
| Client C# Host | 3 gg | ~0.5 gg | 6x |
| Bug Fixing + Hardening | 5 gg | ~2 gg | 2.5x |
| Falsi Avvii + Rework | 4 gg | ~0.5 gg | 8x |
| Documentazione | 1 gg | ~0.2 gg | 5x |
| TOTALE | 53.5 gg | ~12 gg | 4.5x |
| Umano (realistico) | Con AI Assistant | Ratio | |
|---|---|---|---|
| Giornate equivalenti (8h) | 53 | ~12 | 4.5x |
| Ore effettive | ~424h | ~90h | 4.7x |
| Tempo calendario | ~2.5 mesi | ~3 settimane | 3.5x |
| LOC/giorno | 370 | 1.637 | 4.4x |