Debugutskrift för floats i MPLAB med PICC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Debugutskrift för floats i MPLAB med PICC

Inlägg av bos »

Saker brukar bli enklare med lite debugutskrifter. Just nu sitter jag enbart med mjukvaran som jag utvecklar i PICC från Hi-Tech. printf() verkade lämpligast val för debugutskriften, men vid användande så kommer det inte ut något i MPLAB:s output-fönster, vilket jag antog det skulle göra.

Lite rotande i manualen gav det här:
Function name Purpose
printf(const char * s, ...) Formatted printing to stdout
Och det verkade ju smidigt. Problemet är att output-fönstret inte verkar vara stdout i det här fallet.

Lite extra rotande i Hi-Techs FAQ gav det här:
Q. What does printf output to ?

A. The printf() function calls another function putch() to output
the character after formatting. By default putch() is defined
as an empty function. To allow printf() to write to a specific
output the putch() function needs to be redefined. In most cases
output is directed to the serial port. A sample definition can
be found in the serial.c file in the samples directory of the
compiler distribution for the PICC and PICC18 compilers.
Mycket riktigt, den PIC-kompilerade funktionen putch() är tom (innehåller endast "clrf STATUS; return"), så där tog det roliga slut eftersom att skriva en egen putch() skulle vara rätt döfött då det blir PIC-kod av det.

Men jag vill fortfarande gärna ha debugutskrifter. Närmare bestämt så vill jag i en loop skriva ut ett par floats för att se om de håller sig inom rätt ramar. Provade då att dra upp watch-fönstret, men när jag hovrar mina float-värden så är värdena helt galna.

Kod: Markera allt

double Cx = 440e-12
representeras som "403042e-039" i watchen. Om det är watchen som visar fel eller om det faktiska värdet lagras fel vet jag inte, men det är iallafall därför jag skulle vilja ha printf() till att spotta ut värden i output-fönstret.

Vet någon hur man går tillväga för att få printf() att skriva i output?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Debugutskrift för floats i MPLAB med PICC

Inlägg av Icecap »

Hur enkelt som helst!

Kod: Markera allt

int putch(int Input)
  {
  // Vänta på att serieporten blir ledig (klar att ta emot ett tecken)
  // Skriv Input till TX-registret
  // Klart!
  }
putch() kallas alltså för varje tecken som ska skrivas ut, sedan är det upp till dig att skicka varje byte rätt håll.

Jag har använd egna definitioner putch() till en del olika saker, haft den att växla mellan 2 serieporta och en LCD, satte bara en växel som bestämde var min utskrift skulle gå och sedan skriva ut med standardfunktionerna.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Debugutskrift för floats i MPLAB med PICC

Inlägg av bos »

Tack för tipset, men jag sitter som sagt enbart med mjukvaran nu och har således ingen serieport att skicka till. Det är därför jag vill ha all debuginfo direkt inne i MPLAB.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Debugutskrift för floats i MPLAB med PICC

Inlägg av Icecap »

Skriv till en minnesbuffer då...

Ha en pekare som indexerar i buffern och när du ska skriva ut testutskriften kan du nolla denna index innan.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Debugutskrift för floats i MPLAB med PICC

Inlägg av sodjan »

Hur i jösse namn skulle PIC koden ha någon som helst aning om vad ett "output-fönster" är ??
Det finns inget "output-fönster" i en PIC! Jag tror du riktigt ordentligt har missförstått det hela... :-)
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Debugutskrift för floats i MPLAB med PICC

Inlägg av bos »

Jag har bara litat blint på PICC-manualen som hela tiden hänvisar till stdout, som - för övrigt - inte heller finns på en PIC, men som jag antog hade någon underliggande magisymbios med MPSIM för att presentera utskrifter på lämpligt sätt. Så var dock inte fallet.

En sprintf() och en watch på buffern löste biffen, hur som helst. Tack Icecap.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Debugutskrift för floats i MPLAB med PICC

Inlägg av vfr »

Eftersom det i ett inbyggt system inte finns något givet sätt att prentera text, så gör man ofta så att det går till den inbyggda stdout och låter användaren själv definiera vad stdout skall göra. Just detta kunde kanske varit bättre förklarat i dokumentationen till dina verktyg.
Skriv svar