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



Teraz jest 8 lis 2024, o 21:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 28 kwi 2014, o 00:47 
Offline
Użytkownik

Dołączył(a): 18 kwi 2014
Posty: 25
Pomógł: 0

Jak w temacie, czy mogę wchodząc w przerwanie (w moim przypadku overflow) przekazać jakieś argumenty do funkcji, którą także wywołuję w przerwaniu? Przekazywane argumenty zadeklarowane są globalnie.
Oto funkcja main: (program ma za zadanie wyświetlić liczenie do 60 na dwóch segmentach wyświetlacza 7-segmentowego)

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



Czy w tym przypadku gdy zmienna jest zadeklarowana globalnie konieczne jest użycie specyfikatora 'volatile' ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2014, o 02:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

Tak, to jest konieczne.

http://mirekk36.blogspot.co.uk/2011/08/test.html

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2014, o 02:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Volatile gwarantuje, że zmienna nie zmieni swojej wartości bez wiedzy kompilatora.

Z tego co ja rozumiem to volatile jest potrzebne gdy wartość zmiennej może się zmienić (czyli nastąpić przypisanie) zarówno w programie głównym jak i w przerwaniu.
Natomiast jeśli w przerwaniu tylko z niej korzystamy (z jej wartości przypisanej przez program główny) to to nie jest konieczne.

Ale w dobrze by było to sprawdzić :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2014, o 07:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Cytuj:
Volatile gwarantuje, że zmienna nie zmieni swojej wartości bez wiedzy kompilatora.

JA bym napisał, że
Volatile gwarantuje, że zmienna może zmienić swoją wartość bez wiedzy kompilatora



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2014, o 19:38 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Skoro matrix_cnt_l , matrix_cnt_s są globalne to funkcja licznik może być bezargumentowa, a najlepiej skoro nie używasz jej nigdzie cały jej kod wstawić do funkcji obsługi przerwania. To co teraz się stanie to zmienne będące argumentami tej funkcji, a mające takie same nazwy jak zmienne globalne przesłonią zmienne globalne, czyli do funkcji zostaną wstawione kopie wartości zmiennych globalnych. W funkcji opeować będziesz na zmiennych lokalnych i je zmienisz, a zmienne globalne pozostaną takie jak były.

Z kolei zmienna interrupt_cnt skoro jest tylko używana w funkcji obsługi przerwania może być lokalna z modyfikatorem static. Raczej starać się należy jak najmniej używać zmiennych globalnych. W zasadzie tylko do komunikowania się pomiędzy różnymi funkcjami.

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

Powyższa linijka powinna wygenerować ostrzeżenie. Zwrócona zostanie tylko wartość matrix_cnt_s.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



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 0 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