2 uint8_t Variablen in uint16_t Variable schreiben

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
simon1516
Beiträge: 2
Registriert: So Jun 14, 2020 1:08 pm

2 uint8_t Variablen in uint16_t Variable schreiben

Beitrag von simon1516 » 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

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: 2 uint8_t Variablen in uint16_t Variable schreiben

Beitrag von mfro » So Jun 14, 2020 1:42 pm

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

simon1516
Beiträge: 2
Registriert: So Jun 14, 2020 1:08 pm

Re: 2 uint8_t Variablen in uint16_t Variable schreiben

Beitrag von simon1516 » 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?

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: 2 uint8_t Variablen in uint16_t Variable schreiben

Beitrag von mfro » So Jun 14, 2020 3:33 pm

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Antworten