nobisz napisał: mam przerwanie w którym wykonuję operacje na zmiennych "globalnych" niestety po powrocie z przerwania moja zmienna odtwarza sobie wartość z przed przerwania. Czy jest jakaś możliwośc przekazania wartości z przerwania do programu głownego, oprócz on interrupt nosave?
Witam,
Sorki ale koledze chyba coś się pokręciło i to mocno.... jak już to pokaż swój fragment kodu w którym takie cuda się zdarzają hmmm??
poza tym opcja NOSAVE nie służy do tego aby włączać/wyłączać możliwość zmian w zmiennych globalnych - to teoria grubymi nićmi szyta.
Nosave - podowuje tylko, że w trakcie przerwania nie są w sposób automatyczny przez kompilator odkładane przy wejściu i zdejmowane przy wyjściu odpowiednie rejestry (a rejestry to nie to samo co zmienne a jeśli nie robisz wstawek w asemblerze to nawet nie masz styczności z rejestrami za bardzo - tak wprost)
chyba, że mylisz pojęcie zmiennej globalnej z rejestrem procesora
albo chyba , że nakombinowałeś za mocno ze stosem i przez to coś ci się chrzani....
tak czy inaczej przy tak zadanym pytaniu możesz zdać się tylko na wróżkę, która może odpowie ci patrząc w fusy od herbaty
Jeśli zdeklarujesz zmienną globalną:
- gdzieś na początku programu w części inicjalizacyjnej, a potem w przerwaniu obojętnie jakim zapiszesz do niej wartość to wszystko będzie prawidłowo działać
Dim Zmienna1 As Byte
Zmienna1 = 15
Do
Cls
Lcd Zmienna1
Print Zmienna1
Wait 1
Loop
Przerwanie_Timer0:
Zmienna1 = 4
Return
oczywiście jeszcze musisz sobie zdefiniować co ile ma Timer0 wyzwalać przerwanko , i w efekcie tego kodu na wyświetlaczu LCD lub na terminalu zobaczysz nie wartość
15 (tak jak to się niby u ciebie dzieje) tylko wartość
4
jeśli u ciebie jest inaczej to skoro twój kod jest TOP SECRET - to szukaj sam w nim problemu bo na 1000% tam jest
pozdr