Przerwania a odczyt zmiennych poza przerwaniem. (AVR)

Nov 09, 2007 7 Replies

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


Je¿eli chcesz mieæ ca³kowit± pewno¶æ to jest to jedyna metoda.

Pozdrawiam CosteC

Użytkownik Michał napisał:

W zasadzie tak powinno się robić.

Pozdrawiam Grzegorz

Dziêkujê za odpowiedzi.

Pozdrawiam

Poczytaj o operacjach atomowych i sekcjach krytycznych.

Mister

na takim malym procku bez systemu to chyba jednak prosciej wylaczyc przerwania na pare instrukcji.

J.

Michał pisze:

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ć.

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required