EN

Embeded Combinatory Firmware

Firmware embedded real-time per macchine di selezione ottica — Panoramica Progetto

Cos'è

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.

Embedded RTOS 530 Test 19.648 Righe C + C# 20 Bug Risolti

Architettura

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
  

Codice Nostro — Conteggio Righe

CategoriaRigheTest
Firmware C embedded (7 moduli)3.711
Test C embedded11.217365
Infrastruttura test1.163
C# compilatore regole (lib + test)2.327165
C# client integrazione host999
Documentazione231
TOTALE19.648530

Stima Tempi di Sviluppo

Quanto impiegherebbe un super senior developer embedded C + C# a costruire tutto da zero, scrivendo tutto il codice a mano?

Perché le Stime Devono Includere i Costi Nascosti

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.

Dettaglio per Fase (Stima Realistica)

#FaseGgPerché
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

Confronto Scenari

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

Timeline di Sviluppo Reale (con AI Coding Assistant)

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.

~21 Giorni Calendario ~90 Ore Effettive ~12 Giornate Piene Equiv. 19.648 Righe Consegnate

Ricostruito da Git + Memory Bank

PeriodoCosa È Stato CostruitoOre 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

Stima vs Realtà

FaseStima (a mano)Reale (AI)Speedup
Architettura + Design4 gg~2 gg2x
Setup Ambiente2 gg~0.5 gg4x
Compilatore Regole (C#)5 gg~1.5 gg3.3x
Pipeline Combinatoria8 gg~2.5 gg3.2x
Engine Valutazione Regole4 gg~1 gg4x
Elaborazione Output (2 engine)5 gg~1 gg5x
Sistema Logging2.5 gg~0.5 gg5x
Cattura Diagnostica4 gg~1.5 gg2.7x
Orchestrazione + Integrazione6 gg~2 gg3x
Client C# Host3 gg~0.5 gg6x
Bug Fixing + Hardening5 gg~2 gg2.5x
Falsi Avvii + Rework4 gg~0.5 gg8x
Documentazione1 gg~0.2 gg5x
TOTALE53.5 gg~12 gg4.5x

Osservazioni Chiave

  1. Architettura e debugging = solo 2–2.5x speedup. Richiedono ragionamento umano che l'AI può assistere ma non sostituire. Capire race condition e bug specifici dell'hardware richiede competenza di dominio e accesso fisico all'attrezzatura.
  2. Fasi di generazione codice = 3–8x speedup. L'AI eccelle nel generare codice testato e coerente con i pattern. Il compilatore regole, i due engine di valutazione, e 530 test sono stati prodotti a velocità impossibili a mano.
  3. Il costo del rework scende da giorni a minuti. Le 1.277 righe cancellate sarebbero costate ~5 giorni-uomo a scrivere. Con l'AI, scrivere e cancellare 500 righe è un'operazione da 15 minuti. Questo cambia fondamentalmente l'approccio al design esplorativo.
  4. Secondo engine di valutazione completo in 2h16m. Piano + implementazione + 18 test per un modulo completo. Un umano impiegherebbe 5 giorni pieni. L'esempio più chiaro di come lo sviluppo assistito da AI sia qualitativamente diverso, non solo più veloce.
  5. Produttività implicita: 1.637 LOC/giorno con AI vs 370 LOC/giorno a mano. Per C embedded con copertura test completa. Media industriale per embedded safety-critical: 50–150 LOC/giorno.

In Sintesi

Umano (realistico)Con AI AssistantRatio
Giornate equivalenti (8h)53~124.5x
Ore effettive~424h~90h4.7x
Tempo calendario~2.5 mesi~3 settimane3.5x
LOC/giorno3701.6374.4x