avr-gcc i linux + deklarera binära värden = error

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

avr-gcc i linux + deklarera binära värden = error

Inlägg 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?
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Integer är 16 bitar.
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

jo har du i och för sig rätt i men får samma fel med

uint8_t test = 0b00000000;
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg 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...
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

När jag körde windows och winavr så funkade det, den kanske skiljer sig lite från avr-gcc
Användarvisningsbild
ahlsten
Inlägg: 659
Blev medlem: 12 november 2005, 00:24:14
Ort: Uppsala

Inlägg 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? :)
Senast redigerad av ahlsten 29 augusti 2006, 23:25:04, redigerad totalt 2 gånger.
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

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

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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...
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Naturligtvis är det som Icecap säger! :D

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.
lazzi
Inlägg: 1
Blev medlem: 15 maj 2006, 14:45:23

Inlägg 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...
Skriv svar