Cosa usate per debuggare le schede arduino-like?

di il
15 risposte

Cosa usate per debuggare le schede arduino-like?

Adesso c'e' l'ide 2.0 che prevede funzionalita' native per il debug, ma solamente su un ridotto set di schede

Ed anche le nuove schede che escono non sembrano adeguarsi alle possibilita' di debug offerte dall'ide 2.0

Andare a colpi di scritte sulla seriale e' improponibile se il codice e' di una certa complessita, e soprattutto falsa i tempi del codice

La domanda e': cosa usate per debuggare un programma di schede tipo arduino?

Andate di debugger swd o jtag?  Prodotti software tipo VisualMicro?  Altro?

15 Risposte

  • Re: Cosa usate per debuggare le schede arduino-like?

    Nella mia limitata esperienza professionale di programmazione di uCs sono giunto alla conclusione che, almeno quando possibile, è semplicemente molto meglio fare il grosso dello sviluppo direttamente su desktop dove 

    • Iterare è velocissimo, soprattutto quando scrivi C (o C++ simil C)
    • Sei costretto a scrivere codice architetturalmente migliore
    • Eviti di usare hack “platform specific”
    • I debugger sono migliori e “beccano” i problemi appena accadano (e.g. quando accedi a memoria ad cazzum)
    • E' facile scrivere test e automatizzarli

    Quando il codice che hai è robusto e sai che si comporta nel modo corretto lo porti sul uC e metti solo la "glue" tra le interfacce.

    Che valga la pena farlo dipende quanto prototipale è il tuo progetto e quanto tempo intendi dedicarci. Sta di fatto che in linea di massima lo sviluppo e l'iterazione su desktop è potenzialmente più veloce se riesci a simulare facilmente input e output del uC nel tuo caso specifico. 

    Just my opinion.

  • Re: Cosa usate per debuggare le schede arduino-like?

    Cosa intendi con  “..sviluppo direttamente su desktop..” ?

    Forse usando un simulatore?

    Chiedo perche' l'accoppiata scheda tipo arduino+debugger la puoi usare anche sulla tua scrivania, e quindi a rigor di termini pure questo e' un sistema ‘desktop’

    La questione posta e' nella modalita' di debug che usate per chi scrive codice per microcontrollore

    Perche' la modalita' preferenziale di Arduino, appunto usare la porta seriale per ‘vedere’ che accade, e' semplicemente da barbari, non si riesce a far niente perche' il codice in piu' falsa le prestazioni e soprattutto perche' non si puo' stopare il codice, vedere come sono messe le variabili del programma, e far proseguire il tutto

    Con l'ide 2.0 hanno aggiunto la possibilita' di debug minimo, ma solamente su alcune e pochissime schede dotate di interfaccia debugger integrato, e tutte le altre mille-mila schede sono ancora da usare col metodo barbaro

    Io uso VisualMicro che e' un po' meglio di niente, ma da qua ad avere un ambiente ‘confortevole’ di debug ce ne passa un bel po'

    Mi chiedevo gli altri come facciano a mettere giu' codice che sia piu' lungo di una ventina di righe, e a testarlo adeguatamente

  • Re: Cosa usate per debuggare le schede arduino-like?

    Intendo far girare il codice sull'host (il tuo pc) invece che sul target per quanto sia possibile e relegare il test vero sul target solo per quelle parti di software che hanno davvero dipendenze sull'hardware. Di solito questa parte è minima.

  • Re: Cosa usate per debuggare le schede arduino-like?

    In che senso “..questa parte è minima..” ?

    Se stiamo parlando di un microcontrollore, di solito la parte che ‘fa qualcosa’ con l'esterno e' la maggior parte, almeno nella mia esperienza

    Dove con ‘fa qualcosa’ intendo leggere una tastiera, pilotare un display, leggere dalla seriale, leggere un encoder, fare un pwm, ecc..

  • Re: Cosa usate per debuggare le schede arduino-like?

    Visual Micro potrebbe essere una strada ma i debugger hw sono quelli usati in maniera professionale.

    Cosa usare dipende molto dal modello ma essenzialmente prodotti comunque costosi come ATATMEL ICE e MPLAB X (non espressamente per Arduino ma utilizzati con AVR).

    Comunque, in questi casi la cosa migliore è scrivere nel forum specifico dove si parla di Arduino, non in un forum generale.

  • Re: Cosa usate per debuggare le schede arduino-like?

    07/01/2024 - amorosik ha scritto:


    In che senso “..questa parte è minima..” ?

    Dove con ‘fa qualcosa’ intendo leggere una tastiera, pilotare un display, leggere dalla seriale, leggere un encoder, fare un pwm, ecc..

    Tutte le cose che hai elencato sono già "risolte" e fornite dalle librerie Arduino, nella maggior parte dei casi, non hai bisogno di debuggarle a meno di casi molto speciali. Quello che tu programmi e testi è la business logic che le utilizza e quella è dove avrai i problemi. 

    Leggere una tastiera? La tastiera la hai anche sul pc ma puoi anche facilmente scrivere test automatici. Stessa cosa per input seriale o encoder.

    Pilotare un display? Dipende dal display ma probabilmente saranno un paio di stringhe di output che vengono mandate a un LCD?. Puoi facilmente stamparle a console per testare.

    Fare un pwm? Beh l'output del tuo codice probabilmente è solo un numero quindi controlla che sia giusto quello. 

    Scrivere codice in modo che sia facilmente testabile simulando input e output è anche un ottimo modo per forzarti a fare una buona architettura. Ad esempio rende molto più facile spostare il tuo software su un hardware diverso perché sei costretto a scrivere la business logic in maniera separata senza che abbia dipendenze su un hardware specifico. Certo se fai 20 righe di script su un Arduino non è detto che questo abbia senso ma se fai 20 righe di script per l'arduino ti serve davvero un debugger?

    Sia ben chiaro se i debugger hardware esistono c'è un motivo ma a mio parere vanno “sfoderati” solo quando strettamente necessario.

  • Re: Cosa usate per debuggare le schede arduino-like?

    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

  • Re: Cosa usate per debuggare le schede arduino-like?

    Non lo uso da secoli, ma se il programma diventa complesso c'è ad esempio Atmel Studio, altrimenti quelli professionali tipo IAR per AVR eccetera.

    SWD se non sbaglio si usa per i processori con core Arm,  comunque vanno bene entrambe. Come programmatore/debugger per gli Atmel io usavo l'mk2 ma va bene uno qualsiasi.

    Le librerie Arduino vanno benissimo per i programmi semplici, ma per le cose complesse non vanno bene: ad esempio per cambiare lo stato di un PIN di output ci si  mette fino a qualche millisecondo perché, per andare sul sicuro, la libreria reimposta tutti i registri di configurazione, ma questo diventa inaccettabile per i progetti più complessi

  • Re: Cosa usate per debuggare le schede arduino-like?

    07/01/2024 - amorosik ha scritto:


    In che senso “..questa parte è minima..” ?

    Se stiamo parlando di un microcontrollore, di solito la parte che ‘fa qualcosa’ con l'esterno e' la maggior parte, almeno nella mia esperienza

    Dove con ‘fa qualcosa’ intendo leggere una tastiera, pilotare un display, leggere dalla seriale, leggere un encoder, fare un pwm, ecc..

    Molto grezzo e limitato, ma a me risparmia per la stesura di piccole parti da testare, un sacco di tempo:

    https://wokwi.com/projects/new/arduino-mega

  • Re: Cosa usate per debuggare le schede arduino-like?

    07/01/2024 - amorosik ha scritto:


    In che senso “..questa parte è minima..” ?

    Se stiamo parlando di un microcontrollore, di solito la parte che ‘fa qualcosa’ con l'esterno e' la maggior parte, almeno nella mia esperienza

    Dove con ‘fa qualcosa’ intendo leggere una tastiera, pilotare un display, leggere dalla seriale, leggere un encoder, fare un pwm, ecc..

    la parte dipendente all'hardware la puoi ‘isolare’ in una serie di funzioni/moduli che puoi compilare in base alla piattaforma. Quasi tutto quello che c'e' su un dispositivo lo trovi su un PC e quello che non c'e' lo puoi simulare con un generatore di numeri casuali o un file contenente i dati che ti servono. 

    L'obiettivo e' avere il 90/95% del codice gia' ‘testato’ su pc. Migliore e' la parte simulata, migliore sara' il porting.

    E come ti e' stato detto, questo approccio ti OBBLIGA a scrivere codice piu' ordinato 

  • Re: Cosa usate per debuggare le schede arduino-like?

    Non è esattamente così. Basti pensare a una comunicazione seriale ad alta velocità, dove tipicamente il PC si incarta in bufferizzazioni che dall'altra parte non esistono

  • Re: Cosa usate per debuggare le schede arduino-like?

    @weierstrass, hai ragione. Se vogliamo essere precisi, NON E' MAI vero. MA si puo' fare una buona approssimazione. 

    Ad esempio, quando sviluppi in Java, la tua applicazione NON E' perfettamente portabile su W, M, L, SE non adotti strategie intelligenti che ti rendono indipendente dalla piattaforma. 

    Pensa solo ai path in W e L/M. Se usi il backslash, L ti sputa in un occhio ;-) 

    Se non stai attento con le maiuscole/minuscole, pure… 

  • Re: Cosa usate per debuggare le schede arduino-like?

    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?

  • Re: Cosa usate per debuggare le schede arduino-like?

    11/03/2024 - @Alex ha scritto:


    07/01/2024 - amorosik ha scritto:


    In che senso “..questa parte è minima..” ?

    Se stiamo parlando di un microcontrollore, di solito la parte che ‘fa qualcosa’ con l'esterno e' la maggior parte, almeno nella mia esperienza

    Dove con ‘fa qualcosa’ intendo leggere una tastiera, pilotare un display, leggere dalla seriale, leggere un encoder, fare un pwm, ecc..

    Molto grezzo e limitato, ma a me risparmia per la stesura di piccole parti da testare, un sacco di tempo:

    https://wokwi.com/projects/new/arduino-mega

    Non conoscevo, molto interessante

Devi accedere o registrarti per scrivere nel forum
15 risposte