www.mikrocontroller.net

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


Autor: henne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab auf
avr-gcc -v
Using built-in specs.
Target: avr
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
Thread model: single
gcc version 4.3.4 (GCC)
 geupdatet nach diesem Script:
http://www.avrfreaks.net/index.php?name=PNphpBB2&f...
Allerdings hab ich avr-libc-1.7 installiert.
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)
Weiß dazu jemand mehr?
Gruß
henne

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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));

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was heisst: "Geht nicht"?

Autor: henne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Bit wird nicht gesetzt und der Timerinterrupt nicht freigeschaltet

Autor: mar IO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
macht
do{ (TIMSK) |=  (OCIE1A); }while(0)
sinn??

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
:-)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Nein, siehe Beitrag von holger.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mar IO schrieb:
> macht
>
> do{ (TIMSK) |=  (OCIE1A); }while(0)
> 
> 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.