Guten Morgen, im Arduino bestimme ich die Zykluszeit und erhalte einen Wert in einer float-Variablen (32 bit). Diese Variable möchte ich nun über den CAN-Bus versenden, und muss dazu die Variable in 4 bytes aufteilen. Ich denke, dass das mit bitshift oder dem &-Operator (UND mit 0xff) geht. Liege ich da richtig, oder wie macht man sowas? Grüße!
Nein, du kannst einen float nicht shiften. Nimm memcpy, das wird sogar vom Compiler optimiert.
Hugo Paul schrieb: > Liege ich > da richtig, oder wie macht man sowas? nein, denn shift geht nur für int. ich würde es mit memcpy machen. uint8_t b[sizeof(float)]; float f; memcpy( b, &f, sizeof( float ) );
float foo; foo in ein array von Byte: ((unsigned char*)&foo)[0..3] foo als unsigned long um z.B. shift sowie binary and zu realisieren (*(unsigned long*)&foo)
... schrieb: > Dafür gibt es die union! nein gibt es nicht. sie gehen eventuell dafür, sind aber nicht dafür gemacht.
Ich würde es die Zeit je nach Genauigkeit mit 10, 100 oder 1000 multiplizieren und dann in ein uint16 casten. Dafür muss der Faktor für die Genauigkeit in den anderen Geräten bekannt sein, wenn diese damit was anfangen wollen. Beispiel: Die Zeit beträgt 3,452 Sekunden, multiplizier mit 100 ergibt 345,2 und mit einem Cast kommst du dann auf 345. So mache ich das überall, da ich mit einem µC ungern mit Float/Double rechne.
Noch einfacher ist gleich den gemessenen Integer Wert zu senden, und die Umrechnung auf dem PC zu machen.
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.