xmega virtuelle Ports

Gast #1967150
Lesenswert?
• ▲
▼
Ausgehend vom Beispiel Virtuelle Ports im XMEGA-Tutorial
von Florian Grotz habe ich eine Ansteurung meines GLCD-Displays
durch einen XMEGA128A1 wesentlich beschleunigt.
Dabei habe ich bemerkt, dass der Compiler virtuelle Port-Zugriffe
nicht immer optimal übersetzt, deshalb habe ich dafür asm-Anweisungen
aus der lss-Datei verwendet.
Näheres siehe die angehängte Datei
Angehängte Dateien:
Persönliche Seite #3585632
Lesenswert?
• ▲
▼
Herbert schrieb:
> Christian B. schrieb:
>> dafür kaum Portierbar und unübersichtlicher, nein, danke
>
> In der Regel schreibt man für ein konkretes System- portierbaren Code
> braucht es dazu nicht. Und Code-Übersichtlichkeit ist wohl eher eine
> Sache sinnvoller Kommentierung denn der verwendeten Programmiersprache.

So ein Dünnflitsch. Gerade noch das Gegenbeispiel gehabt: Die ByteBuffer 
Bibliothek in der Codesammlung. Wie soll man sowas portabel in ASM 
implementieren?
Persönliche Seite #3586687
Lesenswert?
• ▲
▼
Herbert schrieb:
> Timmo H. schrieb:
>> Das nutzt SBI genauso wie das VPORT0.OUT &= ~(_BV(7));
>
> Was sind das nur für furchtbare Konstruktionen? Schrecklich. Mein Gott
> nehmt doch SBI und am besten gleich alles in Asm und gut ist.

Es sind die gleichen Anweisungen, die man in Assembler auch hat? 
VPORT0.OUT ist ein #define um den Registerzugriff einfacher zu 
gestalten, & und ~ sind binäre Verknüpfungen, das _BV(x) Zeug ist das 
gleiche wie (1<<x) also einfach nur ein Linksshift um x.

Und ja, das _BV ist auch nicht mein Geschmack, aber stattdessen kann man 
auch einfach eine Bitmaske in Hexadezimal angeben, wenn man darauf 
steht.

VPORT0.OUT &= ~0x10;
#3586785
Lesenswert?
• ▲
▼
Simon K. schrieb:
> & und ~ sind binäre Verknüpfungen, das _BV(x) Zeug ist das
> gleiche wie (1<<x) also einfach nur ein Linksshift um x.
>
Ja genau. Früher gabs dafür das sbi und cbi Macro, was aber jetzt 
deprecated ist.
Das BV mag ich ansich auch nicht, hatte es nur direkt aus der Doku 
kopiert 
(http://www.nongnu.org/avr-libc/user-manual/group__avr__sfr.html), und 
zuerst angenommen, dass es notwenig ist damit der Compiler erkennt sbi 
bzw. cbi zu verwenden, geht aber in der Tat auch ohne.
Gast #3601611
Lesenswert?
• ▲
▼
Die Set und Clear register braucht man bei den Virtuellen Ports nicht, 
da mann auf sie mit SBI, CBI, AND, OR, ... direkt zugreifen kann. Also 
innerhalb eines Taktes eine Bitmanipulation durchführen kann.

Werte sind auch schneller in die Virtuellen Ports geschrieben, da man 
mit IN und OUT anstatt LD und ST arbeiten kann.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.