[elektro] ansi c
Pipi
lista at puzsar.hu
Sun Feb 14 23:01:31 CET 2021
2021.02.14. 20:21 keltezéssel, Gabor Jordan írta:
> Üdvözletem!
> Megint segíŧséget szeretnék kérni. Tény, hogy igencsak megkopott a c tudásom, de most beleakadtam olyanba, hogy guglizás sem segít, meg a c könyv sem ami kéznél van.
> 2 stm32 között NRF24L01 kommunikáció még mindíg. Megy szépen, jobban mint vártam. Idáig úgy csináltam, hogy az adó egy stringbe összerakta a mért dolgokat, mértékegységet írt utána stb. Kísérletezni
> jó volt, de már szeretném a float értékeket áthozni. Na ez nem megy. Próbáltam egy struct-ba rendezni :
>
> struct transfer
> {
> float temperature;
> float pressure;
> float humidity;
> float wind;
> };
> struct transfer TX;
> Ez ment is. Sőt, be is sikerül pakolni egy stringbe a byteokat jól ezzel :
>
> memcpy(&myTxData,&TX,16);
>
> Viszont, kiszedni már nem tudom belőle. Ez elrontja az első byte-ot állandóan :
>
> back_temperature = (myTxData[3]<<24) |(myTxData[2]<<16) | (myTxData[1]<<8) | (myTxData[0]);
back_temperature és myTxData milyen tipusú változó? ez a karakteres sokbites shiftelgetés, meg OR-olás nekem nagyon nem szimpi,
integernél még játszhat, de nem látom át hogy float esetén is jól működne az OR... vagy a jobb oldalt tele kéne rakni kényszerkonverzióval
mint Gábor írta, vagy a memcpy-al rakd vissza,
vagy csinálj egy a float változóra mutató pointert(unsigned char* vagy void*),
és ebbe szépen a vett bájtokat pakolászd bele egymás után
Az adás is mehet ugyanígy (a bájtok számát megadja a sizeof...)
---
Én nem használnék erre float-ot, felesleges programmemória pazarlás, és futásidő pocséklás,
menjen int-be az érték felszorozva 10*a szükséges tizedesek számával...
Kijelzéskor meg figyelni kell a megfelelő helyen a tizedespötty kirakásával
Amíg beleférek az int/long/... -egészbe mint számábrázolási tartomány,
addig tuti messziről kerülöm a float-ot mikrokontrollernél
--
Pipi
http://www.puzsar.hu
More information about the Elektro
mailing list