Forum: Compiler & IDEs setBits nach avr-gcc update nicht mehr


von henne (Gast)


Lesenswert?

Hallo,
ich hab auf
1
avr-gcc -v
2
Using built-in specs.
3
Target: avr
4
Configured with: ../../source/gcc-4.3.4/configure -v --target=avr --disable-nls --prefix=/usr/local/avr --with-gnu-ld --with-gnu-as --enable-languages=c,c++ --disable-libssp --with-dwarf2
5
Thread model: single
6
gcc version 4.3.4 (GCC)
 geupdatet nach diesem Script:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=42631&start=0&postdays=0&postorder=asc&highlight=
Allerdings hab ich avr-libc-1.7 installiert.
Nun stellt sich mit die Frage warum ein
1
setBits(TIMSK ,OCIE1A);
 nicht mehr geht, was vorher unter 4.2 keine Probleme machte.
1
#define setBits(port,mask)  do{ (port) |=  (mask); }while(0)
Weiß dazu jemand mehr?
Gruß
henne

von holger (Gast)


Lesenswert?

>Nun stellt sich mit die Frage warum ein

>setBits(TIMSK ,OCIE1A);

> nicht mehr geht, was vorher unter 4.2 keine Probleme machte.

>#define setBits(port,mask)  do{ (port) |=  (mask); }while(0)

setBits(TIMSK , (1 << OCIE1A));

von Grrrr (Gast)


Lesenswert?

Was heisst: "Geht nicht"?

von henne (Gast)


Lesenswert?

das Bit wird nicht gesetzt und der Timerinterrupt nicht freigeschaltet

von mar IO (Gast)


Lesenswert?

macht
1
do{ (TIMSK) |=  (OCIE1A); }while(0)
sinn??

von Floh (Gast)


Lesenswert?

mar IO schrieb:
> machtdo{ (TIMSK) |=  (OCIE1A); }while(0)
> sinn??

Sagen wirs so: ob mit oder ohne do...while wird die Aktion einmal 
durchgeführt.
:-)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

mar IO schrieb:
> macht
>
1
> do{ (TIMSK) |=  (OCIE1A); }while(0)
2
>
> sinn??

Nein, siehe Beitrag von holger.

von Peter D. (peda)


Lesenswert?

henne schrieb:
> das Bit wird nicht gesetzt und der Timerinterrupt nicht freigeschaltet

Woher weißt Du das?
Im Simulator durchgesteppt und angezeigt?

Keine Warnungen, Fehler beim Compilieren?
Richtiges Target gewählt?
Mal in der entsprechenden io_xxx.h geprüft, ob die Definitionen stimmen?


Peter

von Peter D. (peda)


Lesenswert?

mar IO schrieb:
> macht
>
1
> do{ (TIMSK) |=  (OCIE1A); }while(0)
2
>
> sinn??

Der einzige Grund ist, damit der Compiler meckert, wenn dahinter das ";" 
fehlt.
Man könnte es aber auch gleich als Inline-Funktion schreiben.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.