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



Teraz jest 10 mar 2026, o 20:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 26 lis 2013, o 13:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 sty 2013
Posty: 80
Lokalizacja: Trzciniec
Pomógł: 0

Witam.
Jeżeli w przerwaniu uruchamiamy funkcję, która to funkcja w swoim ciele modyfikuje zmienną, to czy ta zmienna musi być volatile?

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


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

_________________
Zło dobrem zwyciężaj.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2013, o 13:19 
Offline
Moderator
Avatar użytkownika

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

po pierwsze to powinieneś się zastanowić czy w ogóle wywoływać jakiekolwiek funkcje w przerwaniach ? Nie piszę tego dlatego - że niby nie można tak robić - bo można ....

ale warto tego unikać jak ognia gdy tylko się da ...

a jeśli już z jakichś tam względów trzeba - to warto mieć na uwadze jakie to niesie za sobą konsekwencje, bo samo rozważanie o volatile - KTÓRE OCZYWIŚCIE ŻE MUSI BYĆ W TAKIM WYPADKU, to twoje przerwanie zaczyna zjadać dodatkowo:

- więcej pamięci RAM na stos
- więcej czasu na skoki i powroty do i z funkcji

hmmm poza tym na szczęście kompilator jest na tyle sprytny, że i tak często za takiego nieświadomego programistę i tak w wyniku optymalizacji WYWALI taką funkcję i wstawi jej ciało do przerwania bo tak warto zrobić ...

----------------------

reasumując - czym różni się zmiana takiej wartości x jak w twoim przykładzie od tego gdyby była ona zmienian w przerwaniu? no NICZYM - nadal podmiana jej wartości będzie odbywać się poza plecami programu głównego np gdzieś w main(). A to już powoduje z marszu że MUSI BYĆ volatile

no chyba że tej zmiennej nie używasz nigdzie indziej w swoim programie głównym

_________________
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: 26 lis 2013, o 13:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 sty 2013
Posty: 80
Lokalizacja: Trzciniec
Pomógł: 0

Zgadzam się na temat wywoływania funkcji w przerwaniu. Zasady o których piszesz są mi znane. Poproszę o poradę w takim razie jak zrobić niezależnego libsa, który w przerwaniu ma modyfikować jakąś zmienną wtedy gdy w projekcie będzie jakaś funkcja, która jej potrzebuje.
Wpadłem na pomysł z umieszczeniem w przerwaniu callbacka. Jeśli jakaś funkcja zarejestruje się do niego to otrzyma tą zmienną. Jeśli nie to pusty przebieg przerwania. Funkcje jest bardzo krótka.
np. taka (przykład)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Zło dobrem zwyciężaj.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2013, o 13:38 
Offline
Moderator
Avatar użytkownika

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

wiesz jeśli to libs dla ciebie samego to jeszcze rozumiem - ale oddawanie takiego libsa z callbackami osadzonymi w przerwaniu to już może być mała masakra ;)

a jeśli chodzi o tą krótką funkcję z tymi if'ami to jak widać chodzi o obsługę przycisków tylko - więc powiedz mi jaki jest w ogóle sens umieszczania tego w przerwaniu tak w ogóle ? :( tym bardziej, że ZERO obsługi drgań styków i takie odejmowanie, dodawanie może działać jakby miało jakieś drgawki nerwowe ...

toż to się idealnie nadaje do wrzucenia w pętlę główną w funkcji wewnątrz której ma działać akurat taka obsługa przycisków.

_________________
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: 26 lis 2013, o 14:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 sty 2013
Posty: 80
Lokalizacja: Trzciniec
Pomógł: 0

Napisałem, że funkcja jest przykładem. Napiszę wieczorem dokładniej.

_________________
Zło dobrem zwyciężaj.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2013, o 14:31 
Offline
Moderator
Avatar użytkownika

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

panbosman napisał(a):
Napisałem, że funkcja jest przykładem. Napiszę wieczorem dokładniej.


Nie - no ja rozumiem ... jeśli to całkiem coś innego niż obsługa przycisków i kompletnie nie widzisz innego wyjścia - to zrób i tak ... ja tylko ogólnie podpowiadam czego warto się wystrzegać albo dlaczego na tzw końcu sięgać po pewne rozwiązania.

_________________
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: 26 lis 2013, o 15:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2013
Posty: 143
Pomógł: 1

może podepnę się pod temat ,czyli rozumiem że funkcja której używamy w przerwaniu powinna zostać zdefiniowana jako inline?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2013, o 15:26 
Offline
Moderator
Avatar użytkownika

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

krzysztof napisał(a):
może podepnę się pod temat ,czyli rozumiem że funkcja której używamy w przerwaniu powinna zostać zdefiniowana jako inline?


Tzn ja powiem tak - jeśli tylko mogę to w ogóle nie używam funkcji w przerwaniach i w zasadzie w 99% przypadków daje radę

czy funkcja jako inline ? hmmm no można ale wystarczy opatrzyć funkcję specyfikatorem static i kompilator sobie zrobi dobrze ;)

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 2 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO