78ATI Postat Octombrie 26, 2007 Partajează Postat Octombrie 26, 2007 Buna!Am o intrebare legata de STACK-ul controlerelor tip 18Fxxx. Am un program realizat pentru acest controler, program ce ruleaza intr-o bucla continua. insa la a 3-a trecere completa ...controlerul se reseteaza. Am constatat lucru acesta setand Config; Reset on Stack Overflow. in cazul cand Configuratia este fara reset, Controlerul ramane blocat.Intrebare:Cum pot golii periodic Stack-ul controlerului astfel incat sa nu se mai ajunga la overflow sau underflow. Mentioneza ca programul este destul de mare si contine multe variabile.Lucrez cu PicBasic, si orice informatie in acest sens imi este de folos!Multumiri Link spre comentariu
Vizitator nex Postat Octombrie 27, 2007 Partajează Postat Octombrie 27, 2007 Salut, In primul rind, trebuie sa vezi de ce se intimpla asta, nu? deci programul nu e scris bine... Apoi poti suprascrie registrul care-ti da virful stivei, dar asta poate afecta programul... Probabil faci niste push-uri pe stiva dar nu mai faci si pop-uri pt recuperare si asa se umple stiva... Cheers ! Link spre comentariu
78ATI Postat Octombrie 27, 2007 Autor Partajează Postat Octombrie 27, 2007 Programul a fost scris initial pentru 16F88. Si a mers ok. L-am migrat pe 18F1320, insa dupa problemele de pornire am reusit sa fac sa mearga...cu acest inconvenient al restartului.Nu folosesc nici o comanda PUSH, (nu apelez subrutine cu paramatrii).Cum se poate creea o functionare circulara a STACK? Am vazut ca diferenta in 16Fxx si 18Fxx este aceast mod de functionare a Stack-ului. Cum pot implementa o functionare similara? Link spre comentariu
Abram Burel Postat Octombrie 27, 2007 Partajează Postat Octombrie 27, 2007 Nu faci "push" dar faci cu siguranta "call". Apelurile de rutine din rutine incarca evident stiva.O alta intamplare posibila ar fi o intrerupere periodica a carei executie dureaza mai mult decat intervalul dintre doua intreruperi succcesive.Evident, partea "ciudata" este ca merge (sau cel putin se poate presupune ca merge) pe alt procesor, ceea ce inseamna ca ar putea fi generata de diferente in arhitectura celor doua procesoare. Fiind insa vorba de un program scris intr-un limbaj de nivel inalt, compilatorul ar trebui sa rezolve diferentele astea. Ceea ce nu este (mai putin evident) obligatoriu! Link spre comentariu
78ATI Postat Octombrie 27, 2007 Autor Partajează Postat Octombrie 27, 2007 Pe 16F88 merge. Problema este asa cum ai spus: arhitectura diferita.Intradevar fac apelari gen: gosub, insa urmate de return. ceea ce teoretic ar insemna sa se goleasca stiva.nu stiu ce ar putea fi...am incercat pe sectiuni mici din program...acelasi lucru, insa "durata de functionare e mai mare" Link spre comentariu
Vizitator Postat Octombrie 29, 2007 Partajează Postat Octombrie 29, 2007 Poate ai intreruperi hardware care cheama intr-una subrutine... Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum