Zastanawiam się, jak się odbywa zapis zmiennej 16 bitowej w procesorze 8 bitowym. Najpewniej najpierw przepisywana jest pierwsza połowa, następnie druga.
A czy możliwe jest, żeby jeśli przerwanie wystąpi równo w tym momencie i będzie chciało odczytać wartość tej zmiennej to odczyta pierwszą połowę nową, a drugą starą?
czyli jeśli a=0000 zmieniam na a=FFFF to odczytam a=FF00 lub a=00FF?
Czy trzeba wyłączać w takim razie przerwania podczas zapisu takiej liczby?
Jeśli nastąpiło przerwanie, procesor przeszedł w obsługę przerwania i nastąpiło drugie przerwanie (Int1 i timer2). Podobno procesor sam wyłącza obsługę przerwań na czas jego wykonywania ale na wszelki wypadek robię to sam i obsługa przerwania wygląda tak:
Co się wydarzy?
Procesor skończy obsługiwać jedno przerwanie i razem z instrukcją return włączy system przerwań i zacznie obsługiwać drugie?
Czy procesor skończy obsługiwać to pierwsze, a to drugie zostanie utracone (czyli np będę sekundę w plecy)?
Trzecia sprawa. Obsługując przerwanie wywołuję procedurę lub funkcję. Program wykonuje ją, kończy i wraca do obsługi przerwania, kończy przerwanie i wraca do obsługi programu głównego do...loop? Czy dzieje się coś na czym za bardzo nie można zapanować?
A czy możliwe jest, żeby jeśli przerwanie wystąpi równo w tym momencie i będzie chciało odczytać wartość tej zmiennej to odczyta pierwszą połowę nową, a drugą starą?
czyli jeśli a=0000 zmieniam na a=FFFF to odczytam a=FF00 lub a=00FF?
Czy trzeba wyłączać w takim razie przerwania podczas zapisu takiej liczby?
Disable interrupts..[zapis zmiennej np a=FF]...enable interruptsJeśli nastąpiło przerwanie, procesor przeszedł w obsługę przerwania i nastąpiło drugie przerwanie (Int1 i timer2). Podobno procesor sam wyłącza obsługę przerwań na czas jego wykonywania ale na wszelki wypadek robię to sam i obsługa przerwania wygląda tak:
obsluga_sekundnika:
Disable Interrupts
...instrukcje
enable Interrupts
returnCo się wydarzy?
Procesor skończy obsługiwać jedno przerwanie i razem z instrukcją return włączy system przerwań i zacznie obsługiwać drugie?
Czy procesor skończy obsługiwać to pierwsze, a to drugie zostanie utracone (czyli np będę sekundę w plecy)?
Trzecia sprawa. Obsługując przerwanie wywołuję procedurę lub funkcję. Program wykonuje ją, kończy i wraca do obsługi przerwania, kończy przerwanie i wraca do obsługi programu głównego do...loop? Czy dzieje się coś na czym za bardzo nie można zapanować?
on timer2 obsluga_sekundnika
obsluga_sekundnika:
Disable Interrupts
Call Odczyt_czasu
enable Interrupts
return
sub odczyt czasu
...instrukcje....
end sub