LSB(word) = reg; MSB(word) =reg;

Gast #464183
Ich lese die Bytes aus dem USB-FIFO nacheinander aus in der Art

uint8_t byte1, byte2;

byte1 = fiforeg;
byte2 = fiforeg;

Wie kann ich am besten ein Word auslesen?
MSB() und LSB() kennt der avr-gcc wohl nicht, also geht nicht:

unit16_t word;
LSB(word) = fiforeg;
MSB(word) = fiforeg;

Einen Funktionsaufruf möchte ich aus effizienzgründen nicht machen.
Mit einem union wäre es natürlich möglich -- ist effizient aber etwas 
viel Schreib-Aufwand. Mit Bitmasken und Schiebeoperationen kann man 
wahrscheinlich auch etwas basteln, aber es darf dadurch nicht 
uneffizient werden.

Wie mache ich das am besten?

Gruß

Stefan Salewski

Gast #464354
>Einen Funktionsaufruf möchte ich aus effizienzgründen nicht machen.
>Mit einem union wäre es natürlich möglich -- ist effizient aber etwas
>viel Schreib-Aufwand. Mit Bitmasken und Schiebeoperationen kann man
>wahrscheinlich auch etwas basteln, aber es darf dadurch nicht
>uneffizient werden.

Wie wäre es erstmal etwas funktionierendes zu schreiben und dann sich 
Gedanken über die Effizienz zu machen?
Gast #464504
@Wolfram:

Wie sagte DIETER NUHR so treffend:
"Man muss nicht zu allem einen Kommentar abgeben - wenn man keine Ahnung 
hat
EINFACH MAL DIE KLAPPE HALTEN"


Tim S. (suxx) schrieb am 27.12.2006 um 12:02 Uhr:
>#define MAKEWORD(a, b)      ((uint16_t)(((uint8_t )(a)) | >((uint16_t)((uint8_t 
)(b))) << 8))
>sollte der compiler auch entsprechend effizient umsetzen können.

Danke für den Tipp -- ich werde es mal ausprobieren und mir den 
erzeugten Assembler-Code ansehen.

Ich hatte eigentlich gehofft, dass es für dieses Problem ein 
Standard-Makro oder ähnliches geben würde. Aber gut, dann weiss ich 
Bescheid.

Gruß

Stefan Salewski

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.