ciklikus újraindulás
ciklikus újraindulás
Üdv!
Adott egy M168 chip, és egy program, melyben elég nagy mélységben(4+ szint) vanna subrutinok egymásba ágyazva.A program kb 10 másodpercig hibátlanul fut, majd a képernyőn összevissza karakterek megjelenésével végül resetel a chip.Reset után halál pontosan ugyanannyi ideig fut, majd ismét ugyanúgy lefagy. Próbáltam a reset regisztet kiolvasni,nem lettem okosabb, illetve próbáltam a $dbg hibakeresét, alacsony stackméretekre gyanakodva, de nagyságrendekkel az ajánlott felett is ugyanezt produkálja(kipóbáltam 320-as hw stackel is(160sh,160frame).
Van esetleg valakinek ötlete, hogy milyen módon és/vagy merre keressem a hibát?
Adott egy M168 chip, és egy program, melyben elég nagy mélységben(4+ szint) vanna subrutinok egymásba ágyazva.A program kb 10 másodpercig hibátlanul fut, majd a képernyőn összevissza karakterek megjelenésével végül resetel a chip.Reset után halál pontosan ugyanannyi ideig fut, majd ismét ugyanúgy lefagy. Próbáltam a reset regisztet kiolvasni,nem lettem okosabb, illetve próbáltam a $dbg hibakeresét, alacsony stackméretekre gyanakodva, de nagyságrendekkel az ajánlott felett is ugyanezt produkálja(kipóbáltam 320-as hw stackel is(160sh,160frame).
Van esetleg valakinek ötlete, hogy milyen módon és/vagy merre keressem a hibát?
Gosub helyett 1-2 helyen nem goto van?
A $dbg-vel nem boldogultam igazán sosem.
Így maradt a stcheck utasítás. Az is azért szépen működik...
A 320 HWStack is lehet hogy kevés. SWstack és a Frames is befolyásol....
Idézet a vonatkozó (34.) Bascom könyvfejezetből:
"A Frame helyen tárolódnak az átmeneti (temp) és helyi változók (local). Szintén ide kerülnek a szubrutin-/funkcióhívások átadott változói."
"Mikor szükséges a Frame? Bármikor, amint egy szám-szöveg átalakításra van szükség."
És ezek stackek/frames-ek egymásra is tudnak lógni....
A $dbg-vel nem boldogultam igazán sosem.
Így maradt a stcheck utasítás. Az is azért szépen működik...
A 320 HWStack is lehet hogy kevés. SWstack és a Frames is befolyásol....
Idézet a vonatkozó (34.) Bascom könyvfejezetből:
"A Frame helyen tárolódnak az átmeneti (temp) és helyi változók (local). Szintén ide kerülnek a szubrutin-/funkcióhívások átadott változói."
"Mikor szükséges a Frame? Bármikor, amint egy szám-szöveg átalakításra van szükség."
És ezek stackek/frames-ek egymásra is tudnak lógni....
Köszönöm szépen a segítséget!
Róbert nagyon jól ráérzett, a goto-gosub dologra, 2 hónap szenvedés után pont tegnap jöttem rá hogy eddig ez volt a gond, és így jutottam el a mostani hibához:)
Nekem nagyon gyanús hogy túlcsordulás van, mert többször teljesen hibátlanul lefut a main ciklus, és csak sokadik loop ciklus után "fagy ki".STCheck-et meg fogom próbálni, bár eddig megpróbáltam elkerülni,mert nem igazán értettem a működést,de akkor átnézem, és írok ha van fejlemény.
Róbert nagyon jól ráérzett, a goto-gosub dologra, 2 hónap szenvedés után pont tegnap jöttem rá hogy eddig ez volt a gond, és így jutottam el a mostani hibához:)
Nekem nagyon gyanús hogy túlcsordulás van, mert többször teljesen hibátlanul lefut a main ciklus, és csak sokadik loop ciklus után "fagy ki".STCheck-et meg fogom próbálni, bár eddig megpróbáltam elkerülni,mert nem igazán értettem a működést,de akkor átnézem, és írok ha van fejlemény.
Én mondjuk a túlcsordulásra pont azért nem tippelnék
hanem inkább a sub-rendszerek körüli hibára
mert akkor valamit nagyon elrontottak a compileren és
dobhatjuk ki az egészet.
(igen csúf lenne ha elrontaná a címzés-memóriakezelés-változók
kezelését)
szimulátorban kár hogy nincs log...
szimulátorban próbáltad már?
otrt is lefagy?
hanem inkább a sub-rendszerek körüli hibára
mert akkor valamit nagyon elrontottak a compileren és
dobhatjuk ki az egészet.
(igen csúf lenne ha elrontaná a címzés-memóriakezelés-változók
kezelését)
szimulátorban kár hogy nincs log...
szimulátorban próbáltad már?
otrt is lefagy?
szimulátorral az volt a gondom, hogy nem igazn tudtam detektálni a lefagyás tényét, 10 másodpercet végiglépkedni órajelenként meg elég macerás...nem igazán foglalkoztam még a szimulátorral, biztos megvan ennek a módja..
A jó hír, hogy megoldódott a probléma, a rossz hogy nem igazán tudom hogy mi volt a gond.
Egy barátom javaslatára kitöröltem a saját main_loop főprogram ciklust, és a főprogram do-loop-ban fut most(nem is tudom miért nem igy csináltam eddig), illetve a sub-rutin(ok)-ból nem goto main_loop-al lépek ki(ha return előtt ki kell lépjek), hanem exit sub, és igy egyelőre működik:) Köszönöm a segítséget,remélem az én káromon belátja mindenki hogy először érdemes megtanulni programozni, aztán...
A jó hír, hogy megoldódott a probléma, a rossz hogy nem igazán tudom hogy mi volt a gond.
Egy barátom javaslatára kitöröltem a saját main_loop főprogram ciklust, és a főprogram do-loop-ban fut most(nem is tudom miért nem igy csináltam eddig), illetve a sub-rutin(ok)-ból nem goto main_loop-al lépek ki(ha return előtt ki kell lépjek), hanem exit sub, és igy egyelőre működik:) Köszönöm a segítséget,remélem az én káromon belátja mindenki hogy először érdemes megtanulni programozni, aztán...
ki lehet lépni a subrutinból a goto címkével ....ha utánna visszalépsz.
Bár a subrutinból hívni illik mint kilépni.. pont ezért azt hiszem
vagy a te hasonló példád nyomán (visualnal is ezt tanítják) nem
használok goto utasítást.
Bár a subrutinból hívni illik mint kilépni.. pont ezért azt hiszem
vagy a te hasonló példád nyomán (visualnal is ezt tanítják) nem
használok goto utasítást.
A hozzászólást 1 alkalommal szerkesztették, utoljára herc1234 2009. március 25. szerda, 19:08-kor.
Akkor a Szubrutinból való GOTO kilépés miatt telt be a megfelelő Frames/Stack.
Exit SUB
Vagy ha nem akarsz ennyire ugrálni, akkor
Exit SUB
Vagy ha nem akarsz ennyire ugrálni, akkor
Kód: Egész kijelölése
sub valami
if nem kell tobb=1 then goto subvege
:subvege
end sub
