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
>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?
1 | #define MAKEWORD(a, b) ((uint16_t)(((uint8_t )(a)) | ((uint16_t)((uint8_t )(b))) << 8))
|
sollte der compiler auch entsprechend effizient umsetzen können. mfg tim
@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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.