Un libro potrebbe essere scritto su questo argomento. Scommetto che alcuni hanno. . .
È difficile rispondere perché ogni catena di strumenti ha i suoi punti di forza, i suoi limiti e le sue peculiarità. Devo aver strutturato diversi progetti in una mezza dozzina di modi diversi, ma menzionerò i due che ho usato di più.
Per quasi tutte le tecniche, è necessario suddividere adeguatamente i componenti. L'obiettivo è di rendere ogni modulo 1) una scatola nera ben definita e documentata che possa essere facilmente utilizzata senza dover scavare nel codice, e 2) abbastanza generale da poter essere riutilizzata così come è nei progetti successivi. Tutti i miei progetti utilizzano i miei moduli "matematica", "dispatcher" e "timer". Quindi ci possono essere moduli per SPI, I2C, SCI, PWM ecc. La maggior parte delle volte questa separazione delle funzionalità è piuttosto intuitiva.
La prima tecnica è assemblare ogni modulo separatamente e poi metterli tutti in una libreria di oggetti ("oggetto" come in codice macchina, non "oggetto" come nella programmazione orientata agli oggetti). Quindi, quando si scrive il programma principale, si effettuano solo chiamate alle routine della libreria e il linker includerà automaticamente i moduli oggetto necessari nell'eseguibile.
Ma alcune catene di strumenti o non supportano bene le librerie di oggetti, o ne fanno un laborioso colloquio per creare e mantenere. In questa situazione, "includo" ciascun modulo sorgente necessario alla fine del programma principale, e l'assemblatore crea un modulo oggetto di grandi dimensioni (che facilita il collegamento del linker).
In entrambi i casi, il programma principale inizia con un elenco su "include" per le definizioni dell'hardware e le definizioni delle macro (io uso molti LOT di macro, sia per la leggibilità che per la portabilità). Quindi aggiungo il codice principale. Se sto usando una libreria di oggetti, allora è tutto. Se sto usando una libreria di sorgenti, quindi termino con un elenco di "include" per i moduli di origine richiesti.
Potrei andare avanti, ma è tardi. . .