Assembler in C-Code integrieren

Gast #2183389
Lesenswert?

Hallo

Ich benütze einen Tiny13 mit 1k Flash und muss dazu sehr sparsam 
programmieren.

An Stelle von
PORTB |= (1 << 3);
versuche ich Assembler folgendermassen in C-Code zu integrieren:
asm volatile ("sbi PORTB, 3");

Doch leider erscheinen dabei die 2 Fehlermeldungen:
C:\Users\me\AppData\Local\Temp/ccd2aXXf.s: Assembler messages:
C:\Users\me\AppData\Local\Temp/ccd2aXXf.s:141: Error: constant value 
required

Was bedeutet das? Wie kann ich den Assembler-Code korrekt einbauen?
Bin um eure Hilfe sehr dankbar!!!
#2183413
Lesenswert?

markus schrieb:
> An Stelle von
> PORTB |= (1 << 3);
> versuche ich Assembler folgendermassen in C-Code zu integrieren:
> asm volatile ("sbi PORTB, 3");

Macht das der Compiler nicht automatisch? Der gcc optimiert einzelne 
Bits setzen  löschen zu sbi  cbi.
Du kannst nicht einfach PORTB usw hinschreiben, das ist etwas 
komplizierter.
Hier das Inline-ASM Manual 
http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
Gast #2183579
Lesenswert?

markus schrieb:
> C:\Users\me\AppData\Local\Temp/ccd2aXXf.s:141: Error: constant value
> required
> Was bedeutet das? Wie kann ich den Assembler-Code korrekt einbauen?

Genau das was da steht: die Ports des µC müssen Konstanten sein. Ein 
angeschlossenes Ventil liegt ja schliesslich nicht mal auf diesem und 
dann auf einem anderen Port.

Gruss Reinhard

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