Vorrei fare una specie di punto della situazione delle mie competenze, che non sono elevate dato che programmo per hobby, sono un dilettante e come tale relativamente isolato dal contatto con il "fare" in squadre di persone più esperte (per non parlare di come trovare letteratura adatta se non spulciando in rete). Soffro inoltre di una serie di imprinting acquisiti all'epoca delle CPU 8088 con compilatori il cui livello di ottimizzazione non era quello di oggi, le abitudini erano diverse e così via. La mia enorme resistenza a cambiare abitudini ha fatto il resto del pasticcio
Per dare un'idea del tipo di cose che vorrei sapere prendo spunto dal progettino su Arduino di cui ho parlato altrove.
1) Sono abituato all'idea che passare variabili a una funzione implica copiarle sullo stack e che questo è più lento che usare variabili globali. Per questo motivo con Arduino (sperando di imparare a usare anche dei micro) ho la tendenza a creare variabili globali sia per il passaggio di argomenti sia per esempio per gli indici nei loop, così evito anche l'allocazione delle variabili locali. Beninteso sono coscientissimo dei pericoli di questo approccio (perché ovviamente tendo a riutilizzare le variabili di quel genere e posso sempre dimenticare di aver chiamato in un ciclo "for" una funzione che le usa a sua volta, disastro garantito) e quando scrivo cose che devono girare su PC e la velocità non è un problema non mi faccio alcuno scrupolo a privilegiare modularità e chiarezza. Ma su un micro è diverso, o almeno credo sia diverso. Almeno per le funzioni più critiche tendo a fare così. Vorrei avere un criterio per capire quando è il caso e quando no, possibilmente evitando strumenti di profilazione; queste sono cose che vengono dopo e non sostituiscono un approccio intelligente.
2) Altro ordine di problemi è che non so cosa fa il compilatore e mi spiego tramite un altro problema che ho trovato. Vorrei fermare l'esecuzione per periodi molto brevi inferiori al ms e non volendo contare sul timer interno, ho creato una funzione che si limita a incrementare una variabile per un certo numero di cicli, da tarare poi in fase di verifica. Ma mi è preso il sospetto che il compilatore si accorga che quella variabile incrementata (ovviamente globale, anche per tentare di ingannarlo rispetto al problema di cui sto parlando) non fa niente, non è usata da niente, possa accorgersene e saltare a pie' pari la compilazione di una funzione che non fa nulla. Per quanto ne so, nell'ambito delle variabili locali a una funzione se ne accorge e non compila le parti inutili, ma non è sempre quello che si vuole
3) Tipi. Altro dilemma tipico che incontro sempre è che molto spesso ho valori piccoli che stanno benissimo in un "uint8_t", ma altrettanto spesso sono limiti superiori nei cicli "for". Per quanto ne so i contatori di GCC sono sempre tipo int o long e nel caso di cui sto dicendo il compilatore è costretto a creare una o due variabili temporanee nascoste convertendo tutto in intero o nel più piccolo tipo che possa usare per i contatori. Inutile dire che vorrei sapere se è davvero così, cosa accade e come regolarmi per bilanciare velocità e spazio.
Sono solo esempi, non chiedo la risposta ai problemi specifici anche se qualsiasi osservazione generale che da essi possa nascere è ovviamente benvenutissima. Li ho esposti solo per permettere di tarare possibili risposte. Chiedo se c'è un po' di materiale e letteratura in cui questi problemi vengano trattati e in cui siano codificate una serie di buone regole per scrivere bene senza fare acrobazie con costrutti troppo dipendenti dall'hardware, dato che non vorrei avvicinarmi troppo al silicio se così posso dire.
Cosa posso leggere di utile? Grazie moltissime per qualsiasi suggerimento e lettura consigliata.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





