In molte applicazioni incorporate c'è un compromesso tra rendere il codice molto efficiente o isolare il codice dalla configurazione di sistema specifica per essere immune ai requisiti in evoluzione.Come rendere il vostro codice C incorporato immune alle modifiche dei requisiti senza aggiungere troppe spese generali e complessità?
Quali tipi di costrutti C si impiegano abitualmente per ottenere il meglio da entrambi i mondi (flessibilità e riconfigurabilità senza perdere efficienza)?
Se avete tempo, leggete per vedere esattamente di cosa sto parlando.
Quando stavo sviluppando SW embedded per i controllori di airbag, abbiamo avuto il problema di dover modificare alcune parti del codice ogni volta che il cliente cambiava idea riguardo ai requisiti specifici. Ad esempio, la combinazione di condizioni ed eventi che avrebbero innescato lo schieramento degli airbag è cambiata ogni due settimane durante lo sviluppo. Abbiamo odiato cambiare quel pezzo di codice così spesso.
A quel tempo, ho partecipato alla Conferenza sui sistemi embedded e ho ascoltato una brillante presentazione di Stephen Mellor intitolata "Far fronte ai mutevoli requisiti". Puoi leggere il documento here (ti fanno iscrivere ma è gratuito).
L'idea principale era quella di implementare il comportamento di base nel codice ma configurare i dettagli specifici sotto forma di dati. I dati sono qualcosa che puoi cambiare facilmente e possono anche essere programmabili in EEPROM o in una diversa sezione di flash.
Questa idea è sembrata ottima per risolvere il nostro problema. Ho condiviso questo con il mio collega e abbiamo immediatamente iniziato a rielaborare alcuni dei moduli SW.
Quando si tenta di utilizzare questa idea nella nostra codifica, abbiamo riscontrato alcune difficoltà nell'attuazione effettiva. I nostri costrutti di codice sono diventati terribilmente pesanti e complessi per un sistema embedded vincolato.
Per illustrare questo elaborerò l'esempio che ho citato sopra. Invece di avere una serie di istruzioni if per decidere se la combinazione di input fosse in uno stato che richiedeva uno schieramento degli airbag, ci siamo spostati su una grande tabella di tabelle. Alcune delle condizioni non erano banali, quindi abbiamo usato molti indicatori di funzione per essere in grado di chiamare molte piccole funzioni di supporto che in qualche modo hanno risolto alcune delle condizioni. Abbiamo avuto diversi livelli di riferimento indiretto e tutto è diventato difficile da capire. Per farla breve, abbiamo finito per utilizzare un sacco di memoria, runtime e complessità del codice. Anche il debugging della cosa non era semplice. Il capo ci ha fatto cambiare alcune cose perché i moduli stavano diventando troppo pesanti (e forse aveva ragione!).
PS: C'è una domanda simile in SO, ma sembra che l'attenzione sia diversa. Adapting to meet changing business requirements?
la sua introduzione è piuttosto lungo e non specifica la questione molto bene ... ma comunque è un buon compromesso. – jpinto3912
concordato. Probabilmente otterrai più (e migliori) risposte se stringi un po 'la domanda. Rendilo facile da leggere. Poni la domanda per prima, e poi puoi darci il background pertinente e spiegare tutti i dettagli. Nessuno vuole leggere un romanzo prima ancora di scoprire quale sia la domanda * *) – jalf
Penso che il titolo della domanda sia un po 'lungo: P –