Das Thema wurde schon ein paarmal behandelt, allerdings gab es nie eine funktionierende Lösung. Da ich öfters mal Software zwischen AVR, M16C und anderen uC portieren muss, und andere Compiler den Befehl PORT|=1<<BIT nicht so gut optimieren wie der AVR-GCC, da diese meist PORT.BIT=wert kennen, versuche ich das dem AVR-GCC beizubringen. Hier gab es schonmal einen Versuch, allerdings ist das schon 4 Jahre her, und es gab keine wirkliche Lösung: Beitrag "Port, Pin auf 1 oder null setzen" Vor kurzem hat Jörg Wunsch gemeint, dass dies schon jemand gemacht hätte: Beitrag "Re: struct auf Adresse legen" Ich konnte aber nichts finden. Meine Lösung sieht bisher so aus: typedef struct { volatile unsigned P0 :1; volatile unsigned P1 :1; volatile unsigned P2 :1; volatile unsigned P3 :1; volatile unsigned P4 :1; volatile unsigned P5 :1; volatile unsigned P6 :1; volatile unsigned P7 :1; } PORTBITS_; PORTBITS_ * const PORTBbits=(PORTBITS_ *)0x18; PORTBbits->P0=1; usw. Das funktioniert zwar, wird aber nicht optimiert zu sbi. Wie bringe ich dem Compiuler bei, dass er dieses Struct als _SFR_IO8 behandeln, und zu sbi/cbi optimieren soll?
Nur mal so als Idee: wie wäre es mit einem Makro dass in die jeweilige Form expandiert. Vielleicht etwas unhandlicher, aber müsste doch eigentlich problemlos machbar sein.
Also bei mir funktionierts: Beitrag "Re: Schieberegister-LCD vereinfachen" Wird zu sbi/cbi bei Optimierung -Os Peter
Danke, das ist ja echt ein bischen gemein: Mein Problem war, dass ich eben nicht das _SFR_IO8 drin hatte.
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.