07/01/2024 - fededevi ha scritto:
Ti faccio un esempio pratico che è più utile di 1000 parole. Hai un uC che legge 3 GPIO e in base al loro stato ti da in output un PWM. Facciamo un'interfaccia che gestisce questo:
struct BusinessLogic {
void setInput1( bool value ); // Setta uno dei 3 input
void setInput2( bool value ); // Setta uno dei 3 input
void setInput3( bool value ); // Setta uno dei 3 input
int getOutput();
}
Ora che hai un interfaccia ben chiara puoi andare a implementare questa classe sul tuo pc. l'implementazione può essere complicatissima ma avendo estratto l'interfaccia minima puoi andare a implementare tutti i test case necessari per verificare che funzioni secondo i tuoi requisiti o se non altro farlo a mano...
Quando hai fatto tutti i test necessari la porti sul target devi solo unire le interfacce:
- leggere i 3 gpio e chiamare setInput()
- Settare un pwm a getOutput()
Questi passaggi sono banali, e se i test che hai scritto sono completi non avrai sorprese.
Ovvio che poi ci sono casi dove fare questo è molto più complesso o semplicemente non ne vale la pena ma in linea di massima seguendo questo principio scrivi buon codice con tutti i vantaggi di fare il grosso dello sviluppo su una piattaforma “comoda”.
PS: Per l'interfaccia ancora meglio usare una callback per il cambiamento di output in questo caso (vedi observer pattern) ma non volevo complicarla più del necessario
Si certo, va tutto bene finche' lavori con 20 righe di codice e di librerie che si adattano perfettamente ai dispositivi esterni che vai a controllare
Ma quando il progetto inizia a diventare di una certa consistenza, e devi andare a leggere le fram e non c'e' la libreria adatta, e devi leggere l'encoder ssi ed il codice che trovi non funziona e devi rifarlo da te, e 'sto canchero ti manda il clock a 1 MHz e se stai li a cincischiare col le seriali ti perdi il ¾ dei dati che arrivano, e devi mettere in sleep il micro altrimenti ti consuma le batterie, e devi…
Voglio dire, per le cazzatine va bene un po' tutto, ma se devi mettere su un programma che faccia qualcosa nel ‘mondo reale’, seguire la logica del debug via seriale non e' neanche pensabile
E quindi chiedevo, visto che l'utilizzo di un debugger che permetta di piazzare breakpoint, fermare il codice e vedere come sono messe le variabili usate, e' indispensabile, cosa usate voi?
Io ho preso VisualMicro e sono abbastanza soddisfatto, ma hai visto mai, con l'evoluzione tumultuosa che c'e' in questo campo, che esista quacosa di meglio ancora?