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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren