Sari la conținut
ELFORUM - Forumul electronistilor

Controler 18Fxxxx Clear Stack - Circular Stack


78ATI

Postări Recomandate

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
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • 78ATI

    3

  • Abram Burel

    1

Top autori în acest subiect

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

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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări