mikrocontroller.net

Forum: Compiler & IDEs IO Register expanded extended I/O Atm88


Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag allseits,
nachdem ich nun "Spass und Freude" damit habe, mit WinAVR statt mit
FastAVR(BAsic) meine AVRs zu programmieren und mir schon allerhand
angesehen habe und auch sehr schnell mit dem ganzen warm geworden bin,
stellt sich mir folgende Frage: (langer Satz)
Woher weis der GCC eigntlich, das (auch) im ATmega88 zB die IO nicht
mehr mit IN und OUT, sondern mit ST/STS/STD bzw. mit LD/LDS/LDD zu
erreichen sind. Steht das in der IOmx8.h und er erkennt automatisch,
das ab 0x60 in/out nicht funktioniert, oder wie geht das?

Dankeschön... :-)

AxelR.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jedes I/O-Register ist in der entsprechenden Header-Datei mit seiner
absoluten Adresse definiert. Dadurch kennt der Compiler also schon mal
die Adresse. Da der in-Befehl nur 6 Bit für die Adresse zur Verfügung
hat, ist klar, dass bei Adressen höher als 63 (0x3F) dieser Befehl
nicht mehr verwendet werden kann. Selbiges gilt natürlich auch für
out... Bei den Bitzugriffsbefehlen sieht das genauso aus, nur dass dort
nur 5 Bit zur Verfügung stehen. Wenn ein einzelnes Bit in einem
I/O-Register mit einer Adresse > 0x1F gesetzt werden soll, weiß der
Compiler, dass er nicht sbi nehmen kann, sondern dass er in -> sbr ->
out nehmen muss.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konkret wuerde ich das so machen:

Der Teil mit den Adressen, so wie du ihn beschrieben
hast ist schon ok. Nur würde ich den Compiler (zunächst)
immer den Zugriff über die Adresse machen lassen.

Teil des Compilierprozesses ist auch das Optimieren.
Beim Optimieren gibt es einen sehr, sehr simplen aber
höchst effektiven speziellen Optimierer: den Peephole-Optimizer.
So ein Peephole-Optimizer arbeitet nach einem ganz simplen
Verfahren: man gibt ihm ein bestimmtes Muster vor und teilt
ihm auch noch mit womit dieses Muster ersetzt werden kann.
Im konkreten Fall gebe ich ihm also die Portzugriffe über
die Adressen vor und definiere als Ersetzung denselben
Zugriff über in/out.
Im Endeffekt braucht dann nämlich fast nichts programmiert
zu werden sondern es läuft alles auf ein paar Einträge in
ein paar Tabellen hinaus.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau so funktioniert es.  Daher wird es auch mittelmäßig
uneffektiv, wenn man die Optimierung ausschaltet, dann wird
nämlich immer und für alles MMIO (memory-mapped IO) benutzt.

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich antworte nur deshalb nicht, weil ich mit lesen beschäftigt bin
(Solange, bis ich es verstanden habe)  ;-))

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, nun hab ichs verstanden.

war den Tag wohl schon etwas spät - das was jonny geschrieben hat,
leuchtet ein. Bis dato habe ich nur in Assembler programmiert (naja und
etwas FastAVR).
Für den Austausch der "älteren" durch "neuere" Typen (sgat man wohl
neuerdings "MIGRATION" zu)existiert bei ATMEL aud der Website ein
schönes ASM-Makro, welches so ähnlich arbeitet, wie Karl-Heinz es
beschrieb.

Allerdings wollte ich kein eigenen Compiler schreiben gg.
War nur reine Neugierde...

Ich bedanke mich also wie sich das gehört und
wünsche einen schönen (Sonn)Tag

AxelR.

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.