2 Bytes tauschen

Gast #4907217
Lesenswert?

Hallo,

wie kann ich in C 2 Bytes untereinander tauschen?


Der Hintergrund ist das die Funktion eeprom_read_word aus der #include 
<avr/eeprom.h> Bibliothek als Rückgabetyp little endian hat.

Hab sowas versucht aber es wird nur das LSB verschoben...
1
uint64_t uiVal;
2
uiVal =  256* eeprom_read_word(EE_ADR_SERIAL_NUM);

Scheint trivial aber komme da nicht weiter .-(
Gast #4907224
Lesenswert?

Mario schrieb:
> wie kann ich in C 2 Bytes untereinander tauschen?

Das einfachste ist doch wohl
1
uint8_t tmp = a;
2
a = b;
3
b = tmp;


> Der Hintergrund ist das die Funktion eeprom_read_word aus der #include
> <avr/eeprom.h> Bibliothek als Rückgabetyp little endian hat.
er liefert das, was im eeprom drin steht, wenn es dort richtig drin 
steht liefert er es auch richtig. Da muss nicht getauscht werden.
Gast #4907239
Lesenswert?

Peter II schrieb:
> er liefert das, was im eeprom drin steht, wenn es dort richtig drin
> steht liefert er es auch richtig. Da muss nicht getauscht werden.

Im EEPROM steht es in dieser Reihenfolge: 0x 270E

wenn ich es auslese mit eeprom_read_word(EE_ADR_SERIAL_NUM)

wird es zu 0x 0E27 (wird auf dem PC ausgegeben über USB).

Womit könnte es zusammen hängen?
#4907275
Lesenswert?

Mario schrieb:
> Peter II schrieb:
>> Warum steht es so drin? Wie schreibt du es denn rein?
>
> so schreibe ich es rein:
1
eeprom_write_word(EE_ADR_SERIAL_NUM,  ucRxBuffer[6] | 256 * ucRxBuffer[7]);

Aha. Du schreibst es also anders herum rein, als du es nachher auslesen 
willst. Warum machst du das? Warum schreibst du die Daten - wenn sie 
denn ohnehin in einem byteweisen Buffer vorliegen - überhaupt mit 
eeprom_write_word() statt zweimal eeprom_write_byte()?
Gast #4907280
Lesenswert?

Axel S. schrieb:
> anders herum rein, als du es nachher auslesen
> willst. Warum machst du das? Warum schreibst du die Daten - wenn sie
> denn ohnehin in einem byteweisen Buffer vorliegen - überhaupt mit
> eeprom_write_word() statt zweimal eeprom_write_byte()?

das finde ich eigentlich ok. Wenn ich was als Word auslesen will, würde 
ich es auch als Word reinschreiben. Die Umwandlung vom Protokoll hat 
nichts mit der Speicherung zu tun. Würde ich nicht mal an der gleichen 
stelle machen.
Gast #4907453
Lesenswert?

Wolfgang schrieb:
> Peter II schrieb:
>> Die Umwandlung vom Protokoll hat nichts mit der Speicherung zu tun.
>
> Offensichtlich wandelst du die beiden Bytes aus dem Protokoll doch
> falsch in Word um, bevor du es ins EEROM schreibst, sonst würde es auch
> richtig wieder raus kommen.

ich wandele überhaupt nichts um, ich versuche zu helfen. Bitte darauf 
achten wer was schreibt.

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