Hallo Iedereen,
ik heb een programma geschreven in assembler. Wanneer ik het programma uitvoer treed er na verloop van tijd een herstart van het programma op.
Alles reset opties staan af (watch dog,....)
Wie weet aan wat dit kan liggen....... het ongewenst resetten van de pic
k.p.meinesz
Een schizofreen is nooit alleen!
Op 22 maart 2004 18:16:41 schreef jeroen001:
als je wil dat hij reset als hij klaar is wel
dan heb jij het niet begrepen
een pic reset als de mclr laag getrokken word en loopt als je er 5v opzet
vermoedelijk heb je ergens een goto/btfss/btfsc naar nomansland oftewel naar een ongeprogrameerde geheugen plaats
post je proggie maar eens
mag hier maar ook op mijn mail
Wat ook nog wel eens wil lukken:
- Oscillerende voeding
- Geen fatsoenlijke reset (maar een RC netwerk)
- Op ongedefinieerd niveau hangende pinnen
- Niet aangesloten voeding (waarbij de controller draait op de niveau's op z'n IO pinnen)
k.p.meinesz
Een schizofreen is nooit alleen!
Op 22 maart 2004 21:29:49 schreef Marco69:
Wat ook nog wel eens wil lukken:
- Oscillerende voeding
- Geen fatsoenlijke reset (maar een RC netwerk)
- Op ongedefinieerd niveau hangende pinnen
- Niet aangesloten voeding (waarbij de controller draait op de niveau's op z'n IO pinnen)
die laatste heb ik ook eens gehad zolang een bepaalde pin laag bleef niets aan de hand maar zodra hij hoog moest worden reset
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> Wat ook nog wel eens wil lukken:
voeg toe: stack overflow (dat is op zich niet zo erg, maar later volgt meestal een stack underflow, en dan gaat er toch iets mis).
voeg toe: onvoldoende voeding ontkoppeling (100nF vlak bij de chip, 22 of 100 uF ergens op de print).
ik zou trouwens dubbel en triple checken of je de watchdog echt niet hebt aangezet. Lees je chip uit en kijk wat er echt in staat. Of zet toch maar clrwdt instructies in je code.
Op 22 maart 2004 23:00:01 schreef Wouter van Ooijen:
> Wat ook nog wel eens wil lukken:voeg toe: stack overflow (dat is op zich niet zo erg, maar later volgt meestal een stack underflow, en dan gaat er toch iets mis).
STACK OVERFLOW NIET ERG???
hallow, stack overflow betekend dat je in andere gedeelten van het geheugen gaat schrijven, je hebt een registerdeel, een programma deel en een data deel en nu zou je dus ofwel een stuk programma ofwel een stuk data overschrijven. daar wordt je niet echt blij van. Als het gewoon data is, doet het programma het nog, mar als het je prog om wat voor reden dan is, kun je opnieuw gaan flashen.
heb je dat bij wondows trouwewns wel eens gezien? Dat is below blue movies, je scherm wrodt dan rood en hij begint te piepen alsof het mem kapot is.
[Bericht gewijzigd door High met Henk op ]
k.p.meinesz
Een schizofreen is nooit alleen!
Op 23 maart 2004 11:02:47 schreef ui:
wat bedoel je met stack overflow.hoe moet ik da erin zetten. Ik denk dat het dat moet zijn
gebruik je call instucties die niet worden opgeheven door return?
als je doet call x
dan moet x eindigen met return
als je meer als 7 keer een call doet zonder een return krijg je een stack overflow en dat wil je niet
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> stack overflow betekend dat je in andere gedeelten van het geheugen gaat schrijven
niet bij een PIC, die hebben een aparte (circulaire) stack.
overflow is op zich niet belangrijk, het probleem is de potentiele underflow die er op volgt.
neem bv een main die een procedure aanroep, en die procedure bevat de oneindige loop. De call naar die procedure returnt nooit, het return adres is dus nooit nodig, en het is dus niet erg als dit adres wordt overschreven.
k.p.meinesz
Een schizofreen is nooit alleen!
Op 23 maart 2004 22:27:27 schreef Wouter van Ooijen:
> stack overflow betekend dat je in andere gedeelten van het geheugen gaat schrijvenniet bij een PIC, die hebben een aparte (circulaire) stack.
overflow is op zich niet belangrijk, het probleem is de potentiele underflow die er op volgt.
neem bv een main die een procedure aanroep, en die procedure bevat de oneindige loop. De call naar die procedure returnt nooit, het return adres is dus nooit nodig, en het is dus niet erg als dit adres wordt overschreven.
kun je de endless loop dan niet beter aanroepen met GOTO?
dan houd je de stack vrij.
die underflow ontstaat dus doordat de stack pointers gereset worden na een overflow? het programma loopt dus gewoon door
dan staat de pointer dus op 00h dus bij de eerste return die het prog tegen komt RESET
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> kun je de endless loop dan niet beter aanroepen met GOTO?
dan houd je de stack vrij.
Als je in C of Jal ofzo wekt is een goto lastig, niet erg netjes en ook niet nodig.
> die underflow ontstaat dus doordat de stack pointers gereset worden na een overflow?
Nee, zo werkt een PIC stack niet. Lees de datasheet maar eens goed na, ik geloof fat ik het ook heb uitgelegd in http://www.voti.nl/swp
Nee, de stack laten circuleren, dat is netjes...
Op zich natuurlijk wel leuk van mircochip, maar elke programmeur waar ik verantwoordelijk voor ben die ik het zo zie doen, mag langs komen voor een goed gesprek over zijn (gebrek aan) vaardigheden...
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> Nee, de stack laten circuleren, dat is netjes...
Heeft er iemand beweerd dat het netjes is? Het is gewoon hoe de hardware in elkaar zit, en dat is wrsch. meer kosten gedreven dan 'by design'.
> die ik het zo zie doen, mag langs komen voor een goed gesprek
Die wat doet? Die circulariteit is een hardware aspect, als je dat wil aanpakken mag jij wrsch. voor een goed gesprek komen bij de commercieel directeur.
moet eerlijk zeggen dat ik het ook wel een zeer ranzig ontwerp vindt, zeker als men al redelijk lang een vaste stack kent
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> zeer ranzig ontwerp
Dat hangt af van waar je het ontwerp op beoordeelt. De 12/16 PICs scoren erg goed op minimaal chip oppervlak, en dus minimale productiekosten. Dat wat vroeger erg belangrijk, nu veel minder. De nieuwere PICs (18F, 30F) hebben dus een andere stack. Maar dat zijn opnieuw ontworpen chips, en dat vindt je dus (een beetje) terug in de prijs. Maar als jij liever een oud ranzig ontwerp gebruikt mag je dat natuurlijk best, maar het is wat raar dat je dan klaagt over je eigen keuze 
ik gebruik geen pic. AVR.
maar vindt een stack die vrij door het geheugen fietst echt ranzig ja.
De steeds meer geheugen modules hebben tegenwordig nl ook een stack overflow flag. of je kan variabelen onveranderbaar maken in je prog (in C static zetten). Dan mag het programma dit geheugen niet overschrijven.
[Bericht gewijzigd door High met Henk op ]
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> ik gebruik geen pic. AVR. maar vindt een stack die vrij door het geheugen fietst echt ranzig ja.
Ik denk dat ik je niet helmaal snap. Volgens mij heeft een PIC een stack in een apart stukje geheugen, en een AVR juist in het 'common' RAM. Je bent dus een fan van de PIC versie?
> De steeds meer geheugen modules hebben tegenwordig nl ook een stack overflow flag.
De 18F PICs hebben dat.
> of je kan variabelen onveranderbaar maken in je prog (in C static zetten).
statis is iets anders, ik denk dat je const bedoelt
.1 ik ben absoluut geen PIC fan, maar sprong in deze discussie omdat jij zei dat een stack overflow niet erg is. en een stack in het common ram is juist niet erg, als je maar zorgt dat alles goed geschieden blijft.
.2 zou kunnen zei al: ben niet thuis in PIC's
.3 Sorry, je hebt gelijk, kan me ook vergissen