AVR-GCC: Skriva nytt värde i en char array

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Adis
Inlägg: 1373
Blev medlem: 26 augusti 2003, 19:57:03
Skype: adis1987
Ort: Gävle
Kontakt:

AVR-GCC: Skriva nytt värde i en char array

Inlägg 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.
gkar
Inlägg: 1576
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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!
Användarvisningsbild
Icecap
Inlägg: 26622
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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?
gkar
Inlägg: 1576
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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)
Användarvisningsbild
Adis
Inlägg: 1373
Blev medlem: 26 augusti 2003, 19:57:03
Skype: adis1987
Ort: Gävle
Kontakt:

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26622
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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?
Användarvisningsbild
bit96
Inlägg: 2527
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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.
Användarvisningsbild
Adis
Inlägg: 1373
Blev medlem: 26 augusti 2003, 19:57:03
Skype: adis1987
Ort: Gävle
Kontakt:

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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.
Användarvisningsbild
Adis
Inlägg: 1373
Blev medlem: 26 augusti 2003, 19:57:03
Skype: adis1987
Ort: Gävle
Kontakt:

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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. :oops:
Hela dagen idag har jag jävlats med detta :D
Användarvisningsbild
bit96
Inlägg: 2527
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg 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

Kod: Markera allt

DisplayDrawSring(36,7,buffer,0);
som buffer förstördes?
Användarvisningsbild
Adis
Inlägg: 1373
Blev medlem: 26 augusti 2003, 19:57:03
Skype: adis1987
Ort: Gävle
Kontakt:

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg av Adis »

Se mitt svar ovan, tack för din tid :tumupp:
sodjan
EF Sponsor
Inlägg: 43241
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: AVR-GCC: Skriva nytt värde i en char array

Inlägg av sodjan »

> jag hade en annan funktion som kördes

I en ISR ?
Skriv svar