Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 lut 2025, o 22:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 28 mar 2016, o 23:03 
Offline
Użytkownik

Dołączył(a): 20 wrz 2015
Posty: 55
Pomógł: 0

Witam :)
Chciałem zapytać o co chodzi z tymi typami uint oraz int.
Posiadam BB i czytam go z dość dużymi przerwami i od końca gdyż nie mogłem się oprzeć i chciałem zamigać sobie Ledami :D
Ostatnio próbuję zrobić licznik impulsów ale coś mi nie idzie, nie pamiętałem jakie są dokładnie zakresy ale znalazłem je w książce na 75 str w tabeli. Wynika z niej, że zakres typu uint16_t jest od 0 do 65535 i ten w zupełności by mi wystarczył tymczasem po przekroczeniu 32767 wskakuje na wartości ujemne i zbliża się do 0 a według tabeli to int16_t ma taki zakres. Napisałem sobie taki mały programik na Atmega32 z kwarcem 11059200 Hz.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Napisałem to tylko w celu sprawdzenia i zauważyłem że Typ uint8_t zachowuje się zgodnie z oczekiwaniami(po osiągnięciu 255 zeruje się :) ) tak samo jak int8_t (znajduje się pomiędzy -128 a 127) , natomiast pomiędzy uint16_t a int16_t nie ma żadnej różnicy :( Obydwa te Typy są w zakresie od -32768 a 32767.
O co tu chodzi? Co robię źle? Bardzo proszę o pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2016, o 23:22 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27360
Lokalizacja: Szczecin
Pomógł: 1042

michael.873 napisał(a):
Obydwa te Typy są w zakresie od -32768 a 32767.
O co tu chodzi? Co robię źle?

Robisz źle to co wiele osób ... masz funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


jak myślisz i w razie czego zajrzyj do książki i do kodu na DVD

do czego ona jest ? do wyświetlania liczb z zakresu int a nie uint16_t ... i to jest twój babol

napisz sobie nową funkcję np

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


i w środku zamiast

Kod:
itoa()


daj

Kod:
ltoa()


albo

Kod:
utoa()


;)


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2016, o 23:25 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Dlatego, że funkcja lcd_int jak sama wskazuje ma maksymalny zakres typu int. Jest różnica tylko tak jest wyświetlana. Aby była wyświetlana zgodnie z twoimi oczekiwaniami trzeba zmienić w bibliotece lcd w funkcji lcd_int() funkcję itoa() na bodajże Ltoa wtedy maksymalny typ to będzie long int.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2016, o 06:40 
Offline
Użytkownik

Dołączył(a): 20 wrz 2015
Posty: 55
Pomógł: 0

Teraz rozumiem :)
Napisałem sobie w bibliotece LCD nową funkcję i wszystko śmiga :D
Dziękuję za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2016, o 19:12 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

uint16_t to typ unsigned, czyli bez znaku, a int16_t to typ signed czyli ze znakiem. Oba typy zajmują 2 bajty (16 bitów) jednak są inaczej interpretowane i dlatego program się tak zachowywał. Funkcja itoa służy do obsługi typu int (w AVR typ int ma 16 bitów), a utoa do typu unsigned int (w AVR ten typ ma także 16 bitów).

Wysłane z mojego LG-E460 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2016, o 20:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

A swoją drogą weź się w garść i zacznij czytać po kolei od początku nie przeskakując działów. Sam się przekonasz, że warto poświęcić te parę godzin aby mieć później święty spokój, bo gdy trafisz na podobny problem to już będziesz wiedział, że gdzieś o tym czytałeś i wtedy dopiero będziesz sobie mógł biegać po książce od końca szukając odpowiedzi. Polecam. :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2016, o 21:50 
Offline
Użytkownik

Dołączył(a): 20 wrz 2015
Posty: 55
Pomógł: 0

SylwekK napisał(a):
A swoją drogą weź się w garść i zacznij czytać po kolei od początku nie przeskakując działów.

Tak zrobię :) Dziękuje za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO