Witam,
W programie istnieje zmienna globalna
wejscia1, chciałbym tą zmienną "ładnie ubrać" tak aby mogła zostać wysłana przez UART, oraz na końcu dodać sumę kontrolną ModbusCRC.
Sumę kontrolną obliczam za pomocą takiej funkcji:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Natomiast funkcja przygotowująca ramkę wygląda tak:
Adres jest to również zmienna typu char przechowująca dwu znakowy adres modułu.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Docelowo wysłany łańcuch ma wyglądać tak:
+ADRES^3^TUTAJ ZMIENNA WYJSCIA1^CRCDomyślam się, że robię coś źle przy próbie zamiany zwracanej sumy kontrolnej jako uint16_t do dwóch char. Może ktoś ma pomysł jak powinno to wyglądać prawidłowo, bardziej zoptymalizowane (bo pewnie coś da się uprościć)?
Pozdrawiam.
EDIT:
Chyba już sobie poradziłem - troszkę źle podchodziłem do tego - za bardzo zainspirowałem się funkcją porównującą CRC. Poniżej podaję kod funkcji zwracającej wersję firmware sterownika gdzie obliczanie CRC i przygotowanie ramki działa poprawnie:język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.