Seite 1 von 1

2 uint8_t Variablen in uint16_t Variable schreiben

Verfasst: So Jun 14, 2020 1:19 pm
von simon1516
Hi,

irgendwie funktioniert meine Code nicht richtig. Ich hoffe ihr könnt mir helfen. Ich möchte Daten eines Sensors auslesen. Dieser Sensor hat 12 Byte Daten, die mich interessieren. Diese unterteilen sich in 6 Werte, jeweils höherwertigeres und niedrigerwertiges Byte, in Summe also 12 Byte.

Daher folgender Code:

Code: Alles auswählen

/* Buffer for samples read from sensor. */
static uint8_t m_sample[12];                 // 12 Byte Daten

 uint16_t ergebnis = m_sample[1];        // 16 Bit Variable deklariert. In diese möchte ich jeweils die zwei Bytes schreiben. In diesem Schritt schreibe ich das Low Byte  in die Variable
 ergebnis += m_sample[0]<<8;              // hier schreibe ich das High Byte in die Variable
 printf(ergebnis);                                 // Ausgabe der Variable über UART
Nun bekomme ich als Ausgabe eine unterschiedliche Anzahl an Bytes geschickt. Mal 1, mal 4, mal 7, mal noch mehr...undefiniert.

Was mache ich falsch?

Danke und Gruß

Simon

Re: 2 uint8_t Variablen in uint16_t Variable schreiben

Verfasst: So Jun 14, 2020 1:42 pm
von mfro
simon1516 hat geschrieben:
So Jun 14, 2020 1:19 pm
Hi,

irgendwie funktioniert meine Code nicht richtig. Ich hoffe ihr könnt mir helfen. Ich möchte Daten eines Sensors auslesen. Dieser Sensor hat 12 Byte Daten, die mich interessieren. Diese unterteilen sich in 6 Werte, jeweils höherwertigeres und niedrigerwertiges Byte, in Summe also 12 Byte.

Daher folgender Code:

Code: Alles auswählen

/* Buffer for samples read from sensor. */
static uint8_t m_sample[12];                 // 12 Byte Daten

 uint16_t ergebnis = m_sample[1];        // 16 Bit Variable deklariert. In diese möchte ich jeweils die zwei Bytes schreiben. In diesem Schritt schreibe ich das Low Byte  in die Variable
 ergebnis += m_sample[0]<<8;              // hier schreibe ich das High Byte in die Variable
 printf(ergebnis);                                 // Ausgabe der Variable über UART
Nun bekomme ich als Ausgabe eine unterschiedliche Anzahl an Bytes geschickt. Mal 1, mal 4, mal 7, mal noch mehr...undefiniert.

Was mache ich falsch?

Danke und Gruß

Simon
Du machst (fast) alles richtig, ausser der Ausgabe.

printf(ergebnis) (wenn es das Standard-printf ist) macht alles mögliche, ausser ein uin16_t ausgeben.

Re: 2 uint8_t Variablen in uint16_t Variable schreiben

Verfasst: So Jun 14, 2020 2:46 pm
von simon1516
printf(ergebnis) (wenn es das Standard-printf ist) macht alles mögliche, ausser ein uin16_t ausgeben.
Danke für den Hinweis. So gehts:

printf("%u", (unsigned int)ergebnis);

Hab ich im Internet gefunden :-) Spricht etwas gegen diese Implementierung?

Re: 2 uint8_t Variablen in uint16_t Variable schreiben

Verfasst: So Jun 14, 2020 3:33 pm
von mfro
simon1516 hat geschrieben:
So Jun 14, 2020 2:46 pm
printf(ergebnis) (wenn es das Standard-printf ist) macht alles mögliche, ausser ein uin16_t ausgeben.
Danke für den Hinweis. So gehts:

printf("%u", (unsigned int)ergebnis);

Hab ich im Internet gefunden :-) Spricht etwas gegen diese Implementierung?
Das geht so.

Wenn auf deiner Plattform ein uint16_t ein typedef für unsigned short ist (das dürfte mit wenigen archaischen Ausnahmen für die meisten Plattformen der Fall sein), dann wäre "%hu" (das "h" steht hier für "short") der ganz korrekte Formatstring. Dann kannst Du dir den cast sparen.