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



Teraz jest 4 paź 2025, o 09:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 6 sty 2018, o 20:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

Cześć.

Mam timer który co 10 ms zwiększa zmienną timer_ms

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



Mam również funkcję do której jako argument przekazuję wskaźnik do zmiennej timer_ms

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


Funkcja ma zapamiętać ostatnią wartość timer_ms, następnie pobrać wartość zmiennej *ms, obliczyć różnicę i jeżeli jest większa niż 50 wykonać działanie.

Problem w tym, że jeżeli zmienna last_ms będzie miała wartość np 255 to nigdy nie spełni się ten warunek.

Nie wiem jak do tego podejść, chodzi o to, aby w programie głównym mieć jedną zmienną timer_ms z której mogą korzystać różne funkcje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2018, o 20:40 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

jez2000 napisał(a):
Problem w tym, że jeżeli zmienna last_ms będzie miała wartość np 255 to nigdy nie spełni się ten warunek.

A dlaczego nie?
Zapewne będzie się to wydawać nieco dziwne i nielogiczne, ale w arytmetyce liczb całkowitych bez znaku (jakimi są między innymi zmienne typu uint8_t) wynikiem odejmowania np. 60 - 255 jest liczba 61.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2018, o 20:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

P. Mirek o tym pisze na przykładzie RC5, i nielogiczne staje się logiczne ale nie wiem dlaczego nie działa mi to w tym przypadku.

Dioda mignie kilka razy i koniec. Coś, gdzieś robię źle.

Lub źle podszedłem do zagadnienia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2018, o 21:00 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Pewnie przez domyślną promocję do int.

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2018, o 21:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

AAAAA.... :D

Na stronie atnel jest o tym artykuł, czytałem go już kiedyś ale chyba pominąłem jakiś szczegół. Muszę się tam wrócić i uzupełnić braki.


andrews - dzięki za pomoc

------------------------ [ Dodano po: 26 minutach ]

No jest napisane


http://atnel.pl/domyslna-promocja-do-typu-int.html
Cytuj:
Otóż kompilator zakłada, że z punktu widzenia zachowania najlepszej optymalizacji swoich działań, domyślnie obliczy każde wyrażenie w taki sposób, że jego wynik będzie się mieścił w zakresie liczby typu int


Z forum.atnel.pl wszystko staje się jaśniejsze :D



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: 5 ] 

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