Michał
Guest
Fri Nov 09, 2007 8:28 pm
Witam wszystkich
Mam takie chyba dość proste pytanie, czy jest jakaś "szkoła" do
przekazywania liczb co najmniej 16bitowych modyfikowanych w przerwaniu poza
te przerwanie?
Chodzi mi dokładnie o odczytanie w głownej pętli programu zmiennej 16
bitowej modyfikowanej w przerwaniu. Z 8 bitową zmienną nie ma problemu, bo
raz pobrana powędruje na stos w trakcie wystąpienia przerwania.Z 16 i więcej
bitowymi zmiennymi jest ten problem, że zmienna może zostać zmodyfikowana w
trakcie kopiowania w głównej pętli:
zmienna1=zmienna2;
Przychodzi mi jedynie na myśl wyłączanie na czas kopiowania przerwania. Czy
tak powinno się robić, czy jest lepsza metoda?
Pozdrawiam
CosteC
Guest
Fri Nov 09, 2007 8:43 pm
Quote:
Mam takie chyba dość proste pytanie, czy jest jakaś "szkoła" do
przekazywania liczb co najmniej 16bitowych modyfikowanych w przerwaniu
poza
te przerwanie?
Chodzi mi dokładnie o odczytanie w głownej pętli programu zmiennej 16
bitowej modyfikowanej w przerwaniu. Z 8 bitową zmienną nie ma problemu, bo
raz pobrana powędruje na stos w trakcie wystąpienia przerwania.Z 16 i
więcej
bitowymi zmiennymi jest ten problem, że zmienna może zostać zmodyfikowana
w
trakcie kopiowania w głównej pętli:
zmienna1=zmienna2;
Przychodzi mi jedynie na myśl wyłączanie na czas kopiowania przerwania.
Czy
tak powinno się robić, czy jest lepsza metoda?
Jeżeli chcesz mieć całkowitą pewność to jest to jedyna metoda.
Pozdrawiam
CosteC
Grzegorz Kurczyk
Guest
Fri Nov 09, 2007 8:45 pm
Użytkownik Michał napisał:
Quote:
Przychodzi mi jedynie na myśl wyłączanie na czas kopiowania przerwania.
Czy tak powinno się robić, czy jest lepsza metoda?
W zasadzie tak powinno się robić.
Pozdrawiam
Grzegorz
Michał
Guest
Fri Nov 09, 2007 9:14 pm
Quote:
W zasadzie tak powinno się robić.
Pozdrawiam
Grzegorz
Dziękuję za odpowiedzi.
Pozdrawiam
Mister
Guest
Fri Nov 09, 2007 10:02 pm
Quote:
Dziękuję za odpowiedzi.
Poczytaj o operacjach atomowych i sekcjach krytycznych.
Mister
J.F.
Guest
Fri Nov 09, 2007 10:07 pm
On Fri, 9 Nov 2007 22:02:46 +0100, Mister wrote:
Quote:
Dziękuję za odpowiedzi.
Poczytaj o operacjach atomowych i sekcjach krytycznych.
na takim malym procku bez systemu to chyba jednak prosciej
wylaczyc przerwania na pare instrukcji.
J.
Mario
Guest
Fri Nov 09, 2007 10:29 pm
Michał pisze:
Quote:
Witam wszystkich
Mam takie chyba dość proste pytanie, czy jest jakaś "szkoła" do
przekazywania liczb co najmniej 16bitowych modyfikowanych w przerwaniu
poza te przerwanie?
Chodzi mi dokładnie o odczytanie w głownej pętli programu zmiennej 16
bitowej modyfikowanej w przerwaniu. Z 8 bitową zmienną nie ma problemu,
bo raz pobrana powędruje na stos w trakcie wystąpienia przerwania.Z 16 i
więcej bitowymi zmiennymi jest ten problem, że zmienna może zostać
zmodyfikowana w trakcie kopiowania w głównej pętli:
zmienna1=zmienna2;
Przychodzi mi jedynie na myśl wyłączanie na czas kopiowania przerwania.
Czy tak powinno się robić, czy jest lepsza metoda?
Jeśli przerwanie jest cykliczne to możesz ocenić czy zdążysz odczytać
stan w pętli głównej przed ponownym wywołaniem przerwania. Jeśli nie
masz takiej pewności to niestety powinieneś blokować.
--
Pozdrawiam
MD
grg12
Guest
Sat Nov 10, 2007 10:05 pm
On 9 Nov., 20:28, Michał <m...@edwew.pl> wrote:
Quote:
Przychodzi mi jedynie na myśl wyłączanie na czas kopiowania przerwania. Czy
tak powinno się robić, czy jest lepsza metoda?
Pod wieloma wzgledami jest to najlepsza metoda - ale jesli chcesz za
wszelka cene uniknac wylaczania przerywan (a te przychodza cyklicznie)
zamiast kopiowac z petli glownej mozesz "poprosic" przerywanie zeby
skopiowalo. Potrzebne beda dwa bufory - jeden na ktorym przerywanie
pracuje, drugi do komunikacji i jeszcze flaga "żądania". Kiedy petla
glowna potrzebuje danych ustawia flage i czeka az ta "zgasnie".
Przerywnie za kazdym razem sprawdza czy flaga jest zapalona - jesli
tak, kopiuje dane i gasi flage. Rozwiazanie dosc powolne niestety (i
zjada troche pamieci) ale jak czlowiek musi...
GRG