Forum: Compiler & IDEs uint16 nach uint8[] schreiben


von Großes Fragezeichen (Gast)


Lesenswert?

hallo,

mal eine Frage zum AVR-Studio.

Wenn ich einen uint16 Wert habe, z.B. "Millisekunden" €[0,999]
und ein Array  uint8_t Speicher[50];

kann ich mich dann darauf verlassen, dass bei einem Befehl

Speicher[5] = Millisekunden;

Das Array wie folgt gefüllt wird:
Speicher[5] = HighByte_Millisekunden
Speicher[6] = LowByte_Millisekunden    ?????

mfg

von Ohm (Gast)


Lesenswert?

>kann ich mich dann darauf verlassen
absolut überhaupt nicht...

von Stefan E. (sternst)


Lesenswert?

> Speicher[5] = Millisekunden;

Bei dieser Zeile landet das Low-Byte in Speicher[5] und das High-Byte 
nirgendwo.

von Großes Fragezeichen (Gast)


Lesenswert?

Wie kann ich denn einen uint16 Wert zuverlässig in ein kleineres Array 
legen und dort dann eben zwei Felder besetzen?

von Großes Fragezeichen (Gast)


Lesenswert?

ginge es so:

uint16_t *Word_ptr =NULL;

*Word_ptr=Millisekunden;

Speicher[5]=*Word_ptr;


???????

von DirkB (Gast)


Lesenswert?

Nein, das ist das gleich wie oben.

Wenn du wissen mußt wo Hi- und lo-Byte sind:
Speicher[5] = Millisekunden / 256; // Hi
Speicher[6] = Millisekunden % 256; // Lo

von Großes Fragezeichen (Gast)


Lesenswert?

und wenn ich nun uint16_t Werte aus einem Array lesen möchte?

wie liest ein 8-Bit AVR Controller daraus? Wo setzt Atmel normalerweise 
das High und wo das Low Byte?

von !Gast (Gast)


Lesenswert?

Großes Fragezeichen schrieb:
> und wenn ich nun uint16_t Werte aus einem Array lesen möchte?
Dann liest du eben uint16_t Werte aus einem Array. Wo ist das Problem?

Das kann dir doch egal sein ob der µC 8, 16 oder 107 Bits hat, in C ist 
das Sache des Compilers.

von DirkB (Gast)


Lesenswert?

*(uint16 *)(speicher+4) = Millisekunden;

geht auch.

Aber warum das Ganze?

Wenn du die Daten Übertragen willst und die Funktion erwartet einen 
Zeiger auf uint8_t, dann kannst du auch casten.

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
Noch kein Account? Hier anmelden.