Static può essere molto utile per non lavorare con variabili globali. In pratica la variabile è pre allocata e non viene distrutta e creata ad ogni chiamata a funzione. Oltre a quello (che però con le classi del c++ diventa superfluo) ottieni un piccolo miglioramento a livello di prestazioni (ma molto molto piccolo) perché non si trovano nello stack.
stefanopc ha scritto:Venendo dal basso come dicevo sono più portato a lavorare a basso livello magari sui registri direttamente ma mi manca molta parte del conoscenze dei livelli superiori.
Ovviamente la prima cosa da farsi è divertirsi

La seconda cosa è scrivere codice che funzioni. Il codice "bello", se non "balla" è inutile

Poi cercare il pelo nell'uovo anche serve a poco.
stefanopc ha scritto:Ignoro quali siano le scelte corrette per limitare la complessità del codice.
Eh... bella parola. Non è facile. Sicuramente tra le prime cose (come dicevo anche a
lemure64) è usare librerie già pronte (insomma non reinventare la ruota), nel caso non ci siano funzioni crearsi le proprie, possibilmente in file esterni (da includere nel progetto).
Poi non pensare subito all'ottimizzazione. Cioè non partire subito con le variabili globali (ma anche con la label static). Infatti, tralasciando possibili bug (magari una funzione che modifica una variabile globale quando non dovrebbe) rende molto più arzigogolata la lettura del codice (lanci una funzione, ti aspetti ritorni un risultato e invece modifica un valore). Piuttosto usare un puntatore (ma ha senso su grandi oggetti, come gli array).
Tra l'altro la riusabilità delle funzioni viene meno (perché deve esserci quella variabile globale). Dal wiki dello standard iso del C++ viene spiegato come è bene usare una variabile globale: dichiararla con un "//" davanti
https://isocpp.org/wiki/faq/coding-stan ... lobal-vars 
Questo sta per dire che meno si usano e meglio è.
stefanopc ha scritto:mi manca molta parte del conoscenze dei livelli superiori
Quello che si tende oggi è ad astrarre il più possibile. Poi ad ottimizzare ci pensa il compilatore (e decide lui cosa fare in base a quello che conviene, magari una funzione invece di eseguirla come funzione se è breve ce la incolla proprio, vai a capire), cambia l'ordine di esecuzione di alcune parti e molto, molto altro.
Al massimo lavoro di più sul compilatore affinché il codice compilato sia migliore, ma spesso lavorare a basso livello è contro producente (altre volte è l'unica strada). Infatti se dai istruzioni a basso livello il compilatore poco può fare.
stefanopc ha scritto:Ignoro quali siano le scelte corrette per limitare la complessità del codice.
Anche non fare scelte doppie (cioè nel caso specifico imporre degli stati a soglia e poi analizzare gli stati, che tra l'altro non avendo un nome non si sa cosa siano), meglio decidere ed agire subito.
L'ultima cosa è far fare meno cose al codice

Ma alla fine è quello che ho fatto, il sort lo ho proprio dimenticato (non ho scartato i valori massimi e minimi campionati), però già si fa la media, poi (forse non ho visto il datasheet di quel micro) si potrebbe giocare con il prescaler dell'ADC (o mi sa su questo non è possibile). Anche quello è stato un taglio di una 40ina di linee di codice.
E poi alla fine fregarsene di tutto e scrivere. Sai quanta robaccia (molto brutta) ho scritto? E chissà quanta ne scriverò
