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



Teraz jest 28 mar 2024, o 09:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 25 maja 2019, o 12:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

W greenbooku jest funkcja void ir_mon_auto_hide(void), w której jest sprawdzany warunek:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I tu moje pytanie: jak on działa na kompilatorze dla AVR (nie używam więc nie wiem i chciałbym się dowiedzieć)? Bo dla STM32 i w Microsoft Visual C++ nie tak jakby się chciało. :(

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 20:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

Nie mam errora. Tylko, że warunek jest badany przed dokonaniem operacji zmniejszenia wartości zmiennej, czyli gdy zmienna ma wartość zero warunek jest spełniony i wtedy następuje zmniejszenie wartości o jeden, czyli dla tej funkcji jest to nieprawidłowe zachowanie. Patrząc zaś na zastosowane nawiasy to najpierw powinno być zmniejszenie, a potem sprawdzenie warunku (wtedy byłoby poprawne zachowanie dla tej funkcji). I dlatego ciekawi mnie, czy kompilator dla AVR zachowuje się jak drugi opis, czy też jak pierwszy. Szczególnie, że Mirek w książce pisze, że korzysta z tych rozwiązań dla swoich potrzeb.

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 21:47 
Offline
Użytkownik

Dołączył(a): 03 gru 2014
Posty: 32
Pomógł: 3

I tak ma działać. W tym przypadku dekrementacja następuje po sprawdzeniu warunku. Jeżeli chcesz dekrementować przed sprawdzeniem warunku to znak -- powinien być przed nazwą zmiennej.

Wysłane z mojego SM-G900F przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2019, o 13:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

To wiem. W takim razie funkcja void ir_mon_auto_hide(void) nie działa prawidłowo także na AVR :cry:
Myślałem, że może kompilator dla AVR ma to inaczej rozwiązane - no cóż...
Jeden z powodów, dla których należy unikać takiego pisania warunków - wszak nawias za negacją zdaje się wskazywać, że najpierw kompilator obsłuży dekrementację, a potem negację i sprawdzenie.
Temat do zamknięcia i ewentualnie jakaś informacja z erratą do greenbooka wydanie 1.

_________________
40-32:2=4!



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO