ciklikus újraindulás

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
DJTacki
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2008. augusztus 11. hétfő, 6:00

ciklikus újraindulás

Hozzászólás Szerző: DJTacki »

Ü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?
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

na és a watchdog?
Van egy hiba a compilerben ami talán valami olyasmi
hogy a cimzéseket meg az ide oda ugrásokat nem hibátlanul
figyeli nézd meg minden rutinnak van eleje-vége
ill. van visszatérése.Esetleg van e olyan call amire
nincs visszatérés.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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.... :P
Avatar
DJTacki
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2008. augusztus 11. hétfő, 6:00

Hozzászólás Szerző: DJTacki »

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.
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

É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?
Avatar
DJTacki
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2008. augusztus 11. hétfő, 6:00

Hozzászólás Szerző: DJTacki »

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...:)
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

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.
A hozzászólást 1 alkalommal szerkesztették, utoljára herc1234 2009. március 25. szerda, 19:08-kor.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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

Kód: Egész kijelölése

sub valami

if nem kell tobb=1 then goto subvege

:subvege
end sub
Válasz küldése