Skocz do zawartości

Przesyłanie zmiennych typu float przez UART


simba92

Pomocna odpowiedź

Witam !

Zrealizowałem komunikacje bezprzewodową miedzy stm32 (slave), a komputer(master) w oparciu o moduły HC05 HC06 i konwerter usb-uart.

Jak w temacie w jaki sposób mógłbym przesyłać zmienne typy float przez uart ? Zmienna float jest 4 bajtowa, czy mógłbym wysyłać daną paczkami bajt po bajcie ? Docelowo po stronie pc będzie aplikacja GUI pisana w c#, gdzie zmienna float będzie wyświetlana w jakimś polu tekstowym. Szukam różnych materiałów w necie, konwersje standardy itp ale mam mętlik w głowie. Mógłby mi ktoś coś zasugerować, z góry dzięki!!!

Link do komentarza
Share on other sites

Możesz wysłać poszczególne bajty swojej zmiennej typu float. Najłatwiej jest chyba zdefiniować sobie unię floata i tablicy bajtów i w ten sposób się dobierać do poszczególnych bajtów (poczytaj sobie o union w C). Oczywiście po drugiej stronie będziesz musiał to sobie poskładać do kupy — nie wiem, czy C# obsługuje podobne operacje, w najgorszym razie będziesz musiał to sobie policzyć sam.

Link do komentarza
Share on other sites

Najłatwiej jest chyba zdefiniować sobie unię floata

W C najłatwiej zdefiniować wskaźnik na zmienna 8 bitową i ustawić go na adres tego floata albo tablicy floatów i po prostu inkrementować. W C# chyba tak łatwo sie nie da, ale do zrobienia.

Do tego warto byłoby zadbać o jakiś nagłówek żeby wiedzieć kiedy rozpoczyna sie transfer.

Link do komentarza
Share on other sites

Przesyłanie danych binarnych bywa czasem problematyczne. Jak chodzi o typ float większość języków programowania stosuje się do standardów IEEE, więc brutalna metoda przesyłania float-a jako bajtów może zadziałać. Oczywiście pozostaje problem kolejności bajtów w słowie, ale w przypadku ARM i x86_64 chyba też mamy szczęście i przypadkiem zadziała.

Jeśli to ma być konkretny i jedyny w swoim rodzaju sposób transmisji - wiadomo jaki język/kompilator, jaki porcesor itd można to tak zrobić.

Ale jeśli chodzi o coś bardziej uniwersalnego, niezawodnego i niezależnego od platformy, przesyłanie floatów jako danych binarnych nie najlepiej się sprawdza. Jeżeli nie zależy Ci na dużej optymalizacji ilości danych, to proponuję stary sprawdzony format tekstowy - przesyłasz float-a jako liczbę tekstową. Łatwo jest debuggować, a ew. Zmiana reprezentacji, a nawet użycie typu double nic nie zmieni. Dodatkowo problemy z samym przesyłem (np. Konwersja \n na \r\n) nie mają wpływu na działanie programu.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Zaimplementuj sobie protokół Modbus RTU i masz po problemie. Nie dość że zestandaryzowane rozwiązanie, to jeszcze przemysłowe i kompatybilne z wieloma gotowymi układami. Obsługuje Floaty, i praktycznie wszystkie standardowe formaty.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.