Sida 1 av 1
avr-gcc i linux + deklarera binära värden = error
Postat: 29 augusti 2006, 20:36:26
av mullemeck
hej!
Kör avr-gcc på linux och det funkar riktigt bra, kruxet är bara att jag får error när jag komplerar kod där variabler är deklarerade med binära tal
t.ex int test = 0b00001111;
då får man
error: invalid suffix "b00001111" on integer constant
Nån som har fått samma fel och hittat en lösnng?
Postat: 29 augusti 2006, 20:41:45
av björn
Integer är 16 bitar.
Postat: 29 augusti 2006, 21:11:03
av mullemeck
jo har du i och för sig rätt i men får samma fel med
uint8_t test = 0b00000000;
Postat: 29 augusti 2006, 21:29:04
av cyr
Är binära konstanter någon extension i AVR-GCC?
För det är inte en del av någon C-standard vad jag vet...
Postat: 29 augusti 2006, 21:38:18
av mullemeck
När jag körde windows och winavr så funkade det, den kanske skiljer sig lite från avr-gcc
Postat: 29 augusti 2006, 23:08:58
av ahlsten
Javisst gör det det, du får nog mata in dina konstanter på hexadecimal bas...
EDIT: Jag måste nog stött på det och inte funderat mer på det... för när man tänker efter är det ju lite underligt(?) Beror det på nån branchning i utvecklingen mellan källkod och kompilerade versioner för windoze? Eller är det nån växel?
EDIT2: eller använder kanske win-avr den där fullösningen?

Postat: 29 augusti 2006, 23:11:41
av mullemeck
Hittade en fullösning på nätet, en include fil med 255 defines som konverterar värdena.
Kanske inte det bästa men kommer antagligen funka.
Postat: 30 augusti 2006, 00:23:26
av Icecap
Binäre konstanter ingår inte i ANSI C, därför är de kompilere som tillåter det inte ANSI C, eller rättare: de har tillägg som medger det.
Postat: 30 augusti 2006, 00:37:43
av sodjan
Standard eller inte, ANSI-C eller inte, men, att inte kunna ange en konstant
binärt vid kodning av *mikrokontrollers* verkar väldigt konstigt
oavsett språk eller verktyg...
Postat: 30 augusti 2006, 07:26:15
av Icecap
Jo, kanske. C är ju från tiden där man räknade oktalt, man kan alltså ange tal som decimala ("10"), hexadecimala ("0x..") och oktala ("0o...") men inte binära..... och jag håller med om att det verkar konstigt att exkludera ett sätt av 4 vanliga.... Antar att det är därför att en del kompilera fixar det lilla extra...
Postat: 30 augusti 2006, 09:43:27
av vfr
Naturligtvis är det som Icecap säger!
Man kan också ha viss förståelse för att det var så i tidiga varianter av C-standard, med tanke på arvet från minidatorer med oktal representation etc. Vad som är lite konstigare att förstå, är att det inte lagts till i senare ANSI-standard. Även om det inte är så himla vanligt i desktopapplikationer så är ju faktiskt inbäddade applikationer med C vardagsmat numera.
Postat: 30 augusti 2006, 09:43:38
av lazzi
Jag får samma fel med äldre versioner av winavr! Men inte om man använder t.ex. senaste versionen. Så om du kör med någon gammal release kan det vara värt att kolla upp...