Czy stos się przepełni??



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Konop" <konop13_at_nospam_gazeta.pl>
Subject: Czy stos się przepełni??
Date: Sat, 5 Jul 2003 16:39:42 +0200


Witam!!

Napisałem sobie taki programik (w Bascomie), który w instrukcji
przerwania między innymi sprawdza pare rzeczy, i jeśli "coś" wykryje to
wykonuje instrukcje Goto Poczatek, gdzie etykieta poczatek umieszczona jest
prawie na samym początku programu (tak, aby m.in. wgrać do pamięci LCDka
zdefiniowane znaki specjalne). I tu pojawia się moje pytanie - czy po czymś
takim zostaną w stosie albo gdzieś indziej jakieś śmieci, związane z
uruchomieniem instrukcji przerwania i nie zakończeniem jej?? Jeśli tak, to
co to może spowodować?? Jak te śmieci usunąć??

Z góry dzięki za pomoc...

Pozdrawiam
Konop



--
Serwis Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "KS" <ananass_at_nospam_wpP.plL>
Subject: Re: Czy stos się przepełni??
Date: Sat, 5 Jul 2003 17:20:36 +0200



Użytkownik "Konop" <konop13_at_nospam_gazeta.pl> napisał w wiadomości
news:be6nve$dbg$1_at_nospam_inews.gazeta.pl...
Napisałem sobie taki programik (w Bascomie), który w instrukcji
przerwania między innymi sprawdza pare rzeczy, i jeśli "coś" wykryje to
wykonuje instrukcje Goto Poczatek, gdzie etykieta poczatek umieszczona
jest
prawie na samym początku programu (tak, aby m.in. wgrać do pamięci LCDka
zdefiniowane znaki specjalne). I tu pojawia się moje pytanie - czy po
czymś
takim zostaną w stosie albo gdzieś indziej jakieś śmieci, związane z
uruchomieniem instrukcji przerwania i nie zakończeniem jej?? Jeśli tak, to
co to może spowodować?? Jak te śmieci usunąć??

witam

moja opinia jest taka ze programowanie w taki sposob jest nieeleganckie
wychodzenie z procedury obslugi przerwania jakims skokiem i nie wracanie
do niej jest mysle duzym bledem, ja bym zrobil tak ze po prostu skakal bym
na koniec tej procedury gdzie bym odpalal jakas funkcje ktora ma
robic to co tam pisales: wgrac do pamieci jakies znaki itp
funkcja by skonczyla swoje dzialanie, nastepnie procedura obslugi
przerwania tez by skonczyla swoje dzialanie i wszystko byloby
tak jak powinno,
poza tym w ogole taka koncepcja programowania jest troche bez sensu,
zauwaz, ze do wygenerowania przerwania moze dojsc
w kazdym momencie wykonywania sie programu, pomysl sobie
ze program liczy sobie jakies rzeczy i ma wyswietlic wyniki, nagle
nastepuje przerwanie, procesor odklada na stos zawartosci rejestrow
i "czeka" na instrukcje reti zeby to wszystko ze stosu pobrac,
no ale oczywiscie w Twoim przypadku sie juz nie doczeka i nie dokonczy
tego co mialby zrobic, nie uwazasz ze takie programowanie jest troche
wbrew logice?


pozdr
KS



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Konop" <konop13_at_nospam_gazeta.pl>
Subject: Re: Czy stos się przepełni??
Date: Sat, 5 Jul 2003 17:29:33 +0200


Dobra, liczyłem, że uniknę dokładnego opisu, bo może być długi, no ale
jednak chyba nie... . Otóż sprawa wygląda tak... to urządzenie to sterownik
czasowo-temperaturowy :)... . Urządzenie zasilane jest z sieci, a sam
procesor dodatkowo z baterii. W momencie odłączenia układu od sieci na
jednym z portów procesora (tzn. mikrokontrolera :)) pojawia się stan niski.
Podczas obsługi cosekundowego przerwania procesor sprawdza ten pin... jeśli
się okaże, że jest zasilany z baterii, to wyłącza przetwornik AC (procesor
to AT90S8535) i przechodzi w tryb powersave. W tym trybie działa licznik i
jest obsługa przerwań, więc co sekundę procesor dalej sprawdza ten pin.
Jeśli wykryje, że napięcie sieci powróciło, to musi włączyć z powrotem
przetwornik AC, przesłąć tez znaki do LCD. Dodatkowo wskazane by było, gdyby
nie wracał do tego stanu, w którym był w momencie wyłączenia zasilania, a do
stanu "domyślnego" (ze względu na spore możliwości komplikacji).... Dlatego
uważałem, że taki dziwny sposób będzie dla tej sytuacji odpowiedni... w
sumie wystarczyłoby teraz skasować cały stos, albo raczej ustawić jego
wskaźnik na początek, ale nie bardzo wiem, jak to zrobić w Bascomie...

Pozdrawiam

Konop



--
Serwis Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Mariusz" <brak_at_nospam_wwp.pl>
Subject: Re: Czy stos się przepełni??
Date: Sat, 5 Jul 2003 17:37:05 +0200


przetwornik AC, przesłąć tez znaki do LCD. Dodatkowo wskazane by było,
gdyby
nie wracał do tego stanu, w którym był w momencie wyłączenia zasilania, a
do
stanu "domyślnego" (ze względu na spore możliwości komplikacji)....
Dlatego
uważałem, że taki dziwny sposób będzie dla tej sytuacji odpowiedni... w
sumie wystarczyłoby teraz skasować cały stos, albo raczej ustawić jego
wskaźnik na początek, ale nie bardzo wiem, jak to zrobić w Bascomie...

Nie będę się wczytywał, bo akurat wychodzę. Zmień wskaźnik stosu i po
problemie. W 51 to 0 problemu, w 90 na pewno też. Zresztą dobrym zwyczajem w
51 ustalić własny początek stosu na początku programu, zwykle i tak trzeba
to zrobić, bo jest ustawiony zaraz po rejestrach.

Pozdrawiam



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Grzegorz Latocha" <glatocha_at_nospam_poczta.onet.pl>
Subject: Odp: Czy stos się przepełni??
Date: Sat, 5 Jul 2003 17:43:32 +0200



Użytkownik Konop <konop13_at_nospam_gazeta.pl> w wiadomości do grup dyskusyjnych
napisał:be6qsj$i57$1_at_nospam_inews.gazeta.pl...
Dobra, liczyłem, że uniknę dokładnego opisu, bo może być długi, no ale
jednak chyba nie... . Otóż sprawa wygląda tak... to urządzenie to
sterownik
czasowo-temperaturowy :)... . Urządzenie zasilane jest z sieci, a sam
procesor dodatkowo z baterii. W momencie odłączenia układu od sieci na
jednym z portów procesora (tzn. mikrokontrolera :)) pojawia się stan
niski.
Podczas obsługi cosekundowego przerwania procesor sprawdza ten pin...
jeśli
się okaże, że jest zasilany z baterii, to wyłącza przetwornik AC (procesor
to AT90S8535) i przechodzi w tryb powersave. W tym trybie działa licznik i
jest obsługa przerwań, więc co sekundę procesor dalej sprawdza ten pin.
Jeśli wykryje, że napięcie sieci powróciło, to musi włączyć z powrotem
przetwornik AC, przesłąć tez znaki do LCD. Dodatkowo wskazane by było,
gdyby
nie wracał do tego stanu, w którym był w momencie wyłączenia zasilania, a
do
stanu "domyślnego" (ze względu na spore możliwości komplikacji)....
Dlatego
uważałem, że taki dziwny sposób będzie dla tej sytuacji odpowiedni... w
sumie wystarczyłoby teraz skasować cały stos, albo raczej ustawić jego
wskaźnik na początek, ale nie bardzo wiem, jak to zrobić w Bascomie...

Dokładnie tak jak piszesz, trzeba wyzerować stos, tzn. ustawić znacznik
stosu. Jeżeli gdzieś na początku ustawiasz znacznik stosu, to po skoku na
start powinien się on ustawić od nowa.
Trzeba po prostu do SP wpisać gdzie jest początek stosu, po resecie chyba
07H, ale nie pamiętam już, ja zawsze ustawiałem pod koniec ramu i
zostawiałem 16 lub 32 bajty.
pozdrawiam
Grzegorz Latocha



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "sj" <korinsj_at_nospam_poczta.onet.pl>
Subject: Re: Czy stos się przepełni??
Date: Sat, 5 Jul 2003 18:08:22 +0200



Użytkownik "Konop" <konop13_at_nospam_gazeta.pl> napisał w wiadomości
news:be6nve$dbg$1_at_nospam_inews.gazeta.pl...
Witam!!

Napisałem sobie taki programik (w Bascomie), który w instrukcji
przerwania między innymi sprawdza pare rzeczy, i jeśli "coś" wykryje to
wykonuje instrukcje Goto Poczatek, gdzie etykieta poczatek umieszczona
jest
prawie na samym początku programu (tak, aby m.in. wgrać do pamięci LCDka
zdefiniowane znaki specjalne). I tu pojawia się moje pytanie - czy po
czymś
takim zostaną w stosie albo gdzieś indziej jakieś śmieci, związane z
uruchomieniem instrukcji przerwania i nie zakończeniem jej?? Jeśli tak, to
co to może spowodować?? Jak te śmieci usunąć??

Z góry dzięki za pomoc...

Pozdrawiam
Konop



--
> Serwis Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Moga byc problemy. Przy przyjeciu przerwania procek moze "zmieniac swoj stan
wewnetrzny". Powinno zawsze powrocic sie z przerwania (dla '51 przez RETI).
Aby "bezbolesnie" zrobic to, co chcesz, to przed instrukcja RETI (dla '51)
zdejmij ze stosu (POP) dwa bajty "starego" adresu powrotu z przerwania a
potem odloz na stos (PUSH) nowy adres. Nie pamietam tylko w jakies
kolejnosci (MSB <-> LSB).

Slawek



=======