Sida 1 av 1
AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 16:29:41
av Adis
Ett märkligt beteende. Se exempelkoden:
Kod: Markera allt
char buffer[3];
int bajs = 1;
while(1)
{
dtostrf(bajs,3,0,buffer);
DisplayDrawSring(36,7,buffer,0);
DisplaySendFrame();
bajs++;
}
Varför räknar inte buffer upp, utan alltid innehåller bara den första siffran man skriver till den.
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 16:43:08
av gkar
Räkna upp? Jag tror inte att den skall räkna upp buffer.
Enligt definitionen:
char * dtostrf(
double __val,
signed char __width,
unsigned char __prec,
char * __s)
är _s en array av char, inte en pekare till en pekare av array av char, dvs den kan inte räknas upp.
Din variabel "buffer" är heller ingen pekare utan en referens, vilken inte kan ändras. (En referens är i praktiken en label, men hanteras som en pekare i C i de flesta fall)..
Jag kanske missförstår alltihopa?

Glögg är gott!
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:00:37
av Icecap
Kan det vara "dtostrf() alternative for concatenating a float and a string" och att bajs är int?
Du vill skriva ut en int via en "omvandla float till text", kanske du skulle använda en float som bajs?
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:08:17
av gkar
Ja, det kanske är så han menar?
Int till float blir bara en implicit cast, samt en varning om man valt det. Men bara om headerfilen är inkluderad.
Annars levereras det en int till en funktion som vill ha en float, med en varning, om man slagit på det.
Har du varningar?
Har du inkluderat <stdlib.h> ? (eller vilken fil dtostrf nu ligger i)
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:21:01
av Adis
Jag har en variabel som förändras, som jag vill skriva ut helt enkelt. För att kunna skriva ut den så måste den omvandlas till en char. Hur kommer det sig att innehållet i buffer först kan få värdet 1, sedan blir den som låst.
Blev ingen skillnad nu när bajs är en float.
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:26:29
av Icecap
Nu vet jag inte hur många siffror du kan behöva men buffern ska vara lika stor som antalet tecken du kan behöva + 1 byte för EOL.
Då det är en float du vill skriva ut är det lägsta du kan pressa in i buffern "x.". För att få ut "xxx.x" behövs plats för minst 6 bytes. Är det en integer du vill skriva ut kan du använda sprintf(Buffer, "%3d", bajs);
Det finns även funktioner för att skriva int som text, kanske det är dags att du använder en sådan?
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:26:54
av snigelen
Din buffer är för liten, den rymmer bara två tecken plus avslutande NULL. Men varför använder du inte t.ex. itoa() istället, eftersom det ändå är heltal du stoppar in?
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:36:25
av bit96
Prova att sätta 'bajs' som double och öka buffer.
buffer på 3 tecken inklusive '/0' kan inte rymma mer än position för +/- och en siffra sen är det slut.
Prova att sätta buffer till 20 eller så, så att dy får lite marginal.
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:41:05
av Adis
Hur man omvandlar är egentligen inte ett problem. Frågan är varför buffer inte antar det nya värdet från bajs när den räknas upp.
Har ändrat bajs nu till en double samt buffer[20].
Samma problem. buffer antar bara det första värdet som bajs innehåller.
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:46:25
av Adis
Det är löst, jag hade en annan funktion som kördes som också använde sig av buffer som förstörde allt.

Hela dagen idag har jag jävlats med detta

Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 17:58:20
av bit96
Hmm.
Så någonstans mellan dessa två rader
Kod: Markera allt
dtostrf(bajs,3,0,buffer);
DisplayDrawSring(36,7,buffer,0);
hade du ytterligare kod?
Eller var det inuti funktionen
som buffer förstördes?
Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 18:03:06
av Adis
Se mitt svar ovan, tack för din tid

Re: AVR-GCC: Skriva nytt värde i en char array
Postat: 14 december 2013, 22:23:52
av sodjan
> jag hade en annan funktion som kördes
I en ISR ?