ATNEL tech-forum
https://forum.atnel.pl/

Dodawanie _UINT16_T do _UINT32_T
https://forum.atnel.pl/topic24357.html
Strona 1 z 1

Autor:  AKSELINEK [ 23 lis 2022, o 22:32 ]
Tytuł:  Dodawanie _UINT16_T do _UINT32_T

Witam.
Pytanie może jest banalne ale nie mogę sobie z tym poradzić i wracam się z prośbą o podpowiedz.

W pewnym pracującym urządzeniu zapisuje pomiary do zmiennej _UINT 16t niestety wartość jest dodawana co pewien czas i z obawy o przekroczenie zakresu maksymalnej wartości UINT_16 T chciałbym
wynik przekonwertować do zmiennej UINT 32 T .

uint16_t a;
uint32_t b;

a= 56;
to jak zrobić żeby np: b=a+300;

Nie znalazłem przykładu .
I ewentualnie jak zrobić konwersje odwrotnie? :(

Autor:  Marhef [ 24 lis 2022, o 10:54 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

Może tak:
b = (uint32_t)a + 300;
A odwrotnie to odwrotnie ;)

Autor:  AKSELINEK [ 24 lis 2022, o 21:01 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

Wpisałem jak napisałeś :

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I niestety wyświetlacz LCD pokazał :
56
0
Chyba że funkcja lcd_int(b); nie przyjmuje wartości uint32_t ????

Wpisałem tak :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Też nic czyli 0 :(

Autor:  JarekB [ 24 lis 2022, o 21:07 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

lcd_long( uint32_t val );

Autor:  AKSELINEK [ 24 lis 2022, o 21:35 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

Tej funkcji nie mam w bibliotece niestety wywala Warninga niestety.

Autor:  Marhef [ 25 lis 2022, o 12:08 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

Zmień funkcję do wyświetlania. ALbo dopisz sobie funkcję lcd_long(uint32_t val).
Sprawdź, jak wygląda funkcja Mirka. Tam do zamiany liczby na tekst jest użyte itoa (int na tekst). W Twojej będzie ltoa (long na tekst).

Autor:  mario2015 [ 25 lis 2022, o 13:40 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

Gdzie widzisz problem, przecież jak dodajesz do zmiennej 16bit zmienną 32bit to w wyniku dostaniesz zmienną 32bit (tzw. promocja do int czy jakoś tak się to nazywa, czyli do większej zmiennej)
Czyli reasumując: jeśli dodasz np: 56+300 to liczba wyniesie 356.
Poniżej masz kod, który sprawdziłem w kompilatorze online.
Kod i wynik z terminala.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obrazek

Cytuj:
Nie znalazłem przykładu .
I ewentualnie jak zrobić konwersje odwrotnie? :(

Co masz na myśli odwrotnie? Chcesz zapisać liczbę uint32_t do zmiennej uint16_t?
Jeśli tak, to możesz zrobić jawne rzutowanie do uint16_t ale jeśli wynik będzie większy niż zakres uint16_t, to kompilator nie będzie krzyczał ale otrzymasz nieprawidłowe dane.

Autor:  AKSELINEK [ 25 lis 2022, o 20:52 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

Czyli problem jest w wyświetlaniu a nie wyniku?
I teraz to zrozumiałem.
Dlaczego chcę zamieniać UINT32_T na UINT16_T Ponieważ liczba będąca sumą wyników cyklicznie dodawanych co dobę nie wystarczy na 365 dni , w związku z tym zrobię inaczej suma będzie dodawała się do
zmiennej UINT32_T a może co miesiąc podzielę ją i wyświetlę jako UINT32_T albo może gdzieś dopadnę te w/w fukcję.
Przynajmniej wiem gdzie jest problem dzięki.

Autor:  mario2015 [ 26 lis 2022, o 11:15 ]
Tytuł:  Re: Dodawanie _UINT16_T do _UINT32_T

Do biblioteki LCD-ka dopisz sobie taką funkcję:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

lub
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie wiem, która dla twoich potrzeb będzie prawidłowa.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/