Hoe best Arduino programma's debuggen

Gestart door Steam.N, 09 februari 2016, 10:51:34 AM

Steam.N

Een vraagje die ik misschien beter in een Arduino-specifiek forum zou plaatsen, maar gezien op dit forum heel wat Arduino-kenners zitten ...

Pas recent ben ik het Arduino platform beginnen ontdekken, en ik probeer het één en ander uit.
Blijkbaar niet altijd op de juiste manier.

Een goed voorbeeld is het gebruiken van "Serial.print" instructies, bij het checken van de juiste werking van het programma.
Deze methode blijkt wel veel GlobalVariable memorySpace te gebruiken.

Hoe debuggen jullie je eigen programma's ? 


Knutselgroeten !  Jean       TP-I (B) & TP-II (DR) - N - DC - Handbediening - Zelfbouw  { Sedelocus - De Feniks - Pira-N's Crossing - Turnhout NEEB - Scrap Yard }

PietB

Ik ben ook nog niet zo lang bezig Jean, Dani heeft me een heel eind op weg geholpen.
Maar ik debug ook via de Serial.print methode.
En tijdens het compileren gemaakte fouten volgens de trial en error methode.

Inderdaad de Serial.print is een geheugen vreter, in de finale versie commentarieer ik ze allemaal uit.

Misschien een makkelijker methode is

#define DEBUG 1

#ifdef DEBUG
Serial.print(de te inspecteren variabele);
// Meer debug code...
#endif

Dan kun je op één plek de debug aan of uit zetten.
Ik heb er geen ervaring mee of het efficienter met geheugen om gaat, maar zie het dikwijls in sources.

grt Piet.

dani

er zijn wel enkele manieren denk ik...

* met een display op de Arduino dat de status aangeeft (maar dat vreet zowel geheugen als ook nog eens outputs)
* met de Serial.print  of (iets efficienter)  Serial.write
* met status LEDs  of zo

wat ik meestal doe is een functie "void LogIt(boolean druk)" definiëren die ook Serial.Print doet, maar dan met behulp van 1  enkele globaal gedefinieerde variabele met de tekst er in en een "true" of  "false" om effectief serial te gebruiken.

vb

char LogRegel;

.....

LogRegel="Debug information goes here";
LogIt(true);


...


void LogIt(boolean druk)
{if (druk) {Serial.println(LogRegel);}}





Als je dan het loggen wil afzetten voor je definitief programma dan vervang je  "if (druk)"  door  if (!druk)".
Sowieso zal het gebruik van de subroutine je een beetje memory besparen.  Mar je blijft met je teksten zitten.
De kruik is te water gegaan...
De kruik is niet meer.

conducteur

een console is veruit de meest uitgebreide mogelijkheid om informatie weer te geven (tenzij je een display in je projectje hebt, kun je dat ook gebruiken). Een debug led die je op specifieke plaatsen in het programma aanzet om te kijken of een stuk code wordt uitgevoerd kan ook zijn diensten bewijzen.
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Steam.N

@Piet & Dani:  twee nuttige tips om het geheugenverbruik te beperken, lijkt me.  Probeer ik deze avond uit.

@Rian: de console is natuurlijk zeer nuttig voor de informatie weegave. 
Mijn probleem is echter het geheugenverbruik van het programma (om die informatie te genereren) te beperken, en blijkbaar is de Arduino omgeving niet zo String-vriendelijk ...
Daarom ben ik nieuwsgierig naar jullie tips & tricks  ;)
Knutselgroeten !  Jean       TP-I (B) & TP-II (DR) - N - DC - Handbediening - Zelfbouw  { Sedelocus - De Feniks - Pira-N's Crossing - Turnhout NEEB - Scrap Yard }

philippe_007

Ik gebruik ook steeds de Serial.print() methode,
maar ik test steeds elke stuk dat ik schrijf grondig, pas als dat ok is schrijf ik het volgende stuk.
Dit heeft als gevolg dat je in de eerste delen reeds de Serial.print()  in commentaar kan plaatsen en zo steeds maar een klein stuk code moet debuggen.
Er zijn blijkbaar tools (vooral onder windows) waar je uw project kan in ontwerpen, code schrijven en dan alles op het scherm simuleren... Maar ik heb er nog nooit gebruik van gemaakt.

dani

die simulators zijn  vooral  "sexy looking" maar om echt  te debuggen  verkies ik toch een echte arduino..
Ik heb er al eentje of 2 getest en deden niet echt wat ik wou, maar ik heb ze dan ook niet helemaal "RTFM" gedaan...
Ofwel zijn ze zo omsclachtig dat het sop de kool niet waard is.   Ofwel zijn ze DUUR
De kruik is te water gegaan...
De kruik is niet meer.

raf

proton debugt het programma terwijl je het schrijft en nadien run ik het in real pic simulator en als het daar in werkt dan werkt het ook in de pic

enig probleem heb ik met de functie generator die krijg ik niet aan het werken
daar ik op mijn baan alle signalen met pwm verbingigen aan elkaar brei zou dit wel handiger zijn als ik de pulsen in real pic simulator zou kunnen simuleren
maar buiten dat ben ik zeer tevreden van beide programma's

gr raf   
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

dani

#8
Het gaat over ARDUINO Raf !  En trouwens,  "debuggen" is wat anders dan  spellchecking en sybntax checking "terwijl je programmeert".    Dat doet bijna elke development omgeving.
On topic aub
De kruik is te water gegaan...
De kruik is niet meer.

Gerolf

Ik heb geen Arduino, maar gebruik wel dezelfde AVR-chips. Kan je een Arduino op een andere manieren programmeren (met een STK-500 of zo)?
In dat geval gebruik je natuurlijk een andere programmeeromgeving (Bascom, AVR-Studio, ...) maar die hebben wel goeie simulatie ...
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Steam.N

Arduino via STK-500?  Moet ik eens uitzoeken ...
Knutselgroeten !  Jean       TP-I (B) & TP-II (DR) - N - DC - Handbediening - Zelfbouw  { Sedelocus - De Feniks - Pira-N's Crossing - Turnhout NEEB - Scrap Yard }

Gerolf

Ik gebruik vooral status leds bij praktijktests. Op een bepaald moment in het programma moet een ledje aan, of uit gaan ...
Eens dat stukje goed werkt, worden die led-instructies verwijderd en verderop gebruikt ...

Soms gebruik ik ook een (zelfbouw) extern kastje met eigen µC en display, via RS232 kan ik dan data lezen.
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

dani

ik geloof wel dat dat mogelijk is...

https://www.arduino.cc/en/Hacking/Programmer

De Arduino kan je op meerder manieren programmeren...  ICSP,  STK500,  USBASP,  AVR, ...
Ik gebruik voor mijn "losse"  chips meestal de  USBASP  programmer, dat werkt prima.

Uiteindelijk is en blijft die "externe programmer" toch maar een interface voor het "branden" (overzetten) van je code op je  chip, een  hardware interface tussen je SDK  (sftware development kit) en je  chip.

Ook  AVRDUDE heeft mogelijkheden, maar niet voor het debuggen denk ik.
De kruik is te water gegaan...
De kruik is niet meer.

Steam.N

STK-500 om de arduino te programmeren: ok, maar kun je dan dat ding debuggen ? ? ?
Knutselgroeten !  Jean       TP-I (B) & TP-II (DR) - N - DC - Handbediening - Zelfbouw  { Sedelocus - De Feniks - Pira-N's Crossing - Turnhout NEEB - Scrap Yard }

Gerolf

Dan kan je een andere programmeeromgeving gebruiken, met betere simulatiemogelijkheden
Praktijk-debuggen zal nog steeds via leds, terminal-emulator of displays of zo moeten
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw