mikrocontroller.net

Forum: Compiler & IDEs Bitadressierung von SFR bei AVR


Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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


Autor: bluebrother (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir funktionierts:

Beitrag "Re: Schieberegister-LCD vereinfachen"


Wird zu sbi/cbi bei Optimierung -Os


Peter

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das ist ja echt ein bischen gemein: Mein Problem war, dass ich 
eben nicht das _SFR_IO8 drin hatte.

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.