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
> Speicher[5] = Millisekunden;
Bei dieser Zeile landet das Low-Byte in Speicher[5] und das High-Byte
nirgendwo.
Wie kann ich denn einen uint16 Wert zuverlässig in ein kleineres Array legen und dort dann eben zwei Felder besetzen?
ginge es so: uint16_t *Word_ptr =NULL; *Word_ptr=Millisekunden; Speicher[5]=*Word_ptr; ???????
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
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?
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.
*(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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.