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!!!
markus schrieb: > An Stelle von > PORTB |= (1 << 3); > versuche ich Assembler folgendermassen in C-Code zu integrieren: > asm volatile ("sbi PORTB, 3"); Schau mal ins Listing, der Compiler macht genau das (Optimierung -Os). Assembler ist hier völlig unnötig. Peter
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.