PRR |= _BV(PRTIM1) führt zu "Error: operand out of range: 32"

Gast #4709161
Lesenswert?
• ▲
▼
Ich schalte über das PRR-Register selektiv Komponenten ab und an, um 
bestmöglich Energie zu sparen. Meine CPU ist ein ATTiny25 und ich 
verwende avr-gcc 5.2.1.

Sobald ich nun die Zeile

PRR |= _BV(PRTIM1);

verwende, um Timer1 selektiv abzuschalten, bekomme ich beim Kompilieren 
den Fehler:

Error: operand out of range: 32

Ich bin schon längere Zeit am Überlegen. Was mache ich falsch?
Gast #4709379
Lesenswert?
• ▲
▼
Das ist der oben schon genannte Bug!
gcc 5.2.1 ist davon betroffen.

PRR ist genau das kritische Register 0x20. Die betroffenen gcc Versionen 
verwenden fälschlicherweise die Instruktionen SBI/CBI mit diesem 
Register.

Lösung: gcc updaten

oder der oben schon genannte workaround mit volatile variable: Dann muss 
wegen volatile zwischen den Registern kopiert werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren