mikrocontroller.net

Forum: Projekte & Code xmega virtuelle Ports


Autor: H. Lang (Gast)
Datum:
Angehängte Dateien:

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

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du schon am optimieren bist kannst du dir ja auch mal ansehen was 
der Compiler jeweils aus
ch = (dw >> 8);
und
ch = ((dw & 0xFF00) >> 8);
macht ;-)

Autor: Herbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Gott, immer diese C- Probleme... Setzt Euch auf den Hosenboden und 
lernt ASM! Schneller,kompakter und 1/10 Schreibaufwand.

Autor: Christian B. (luckyfu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herbert schrieb:
> Mein Gott, immer diese C- Probleme... Setzt Euch auf den Hosenboden und
> lernt ASM! Schneller,kompakter und 1/10 Schreibaufwand.

dafür kaum Portierbar und unübersichtlicher, nein, danke

Autor: Herbert (Gast)
Datum:

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

Autor: icare (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wo kann man die Datei virtu.lss finden ?
Danke

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu hast du eigene inline Assembler gemacht? Du kannst auch das in 
AVR-GCC eingebaute nehmen:
VPORT0.OUT |= _BV(7);
Das nutzt SBI genauso wie das
VPORT0.OUT &= ~(_BV(7));
CBI zum Rücksetzen benutzt.

Autor: Herbert (Gast)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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__...), und 
zuerst angenommen, dass es notwenig ist damit der Compiler erkennt sbi 
bzw. cbi zu verwenden, geht aber in der Tat auch ohne.

Autor: Alexander v. Grafenstein (avogra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auf XMega hat man doch auch noch die OUTSET und OUTCLR Register, oder 
gibts die für die vports nicht? Ich find das die einfachste und 
eleganteste Methode.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Vport hat nur in, out, dir und intflags

: Bearbeitet durch User
Autor: achim (Gast)
Datum:

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

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.