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

staat er 5v op pin 4?

zo ja dan reset hij

MCLR moet toch aan 5v hangen via 10k

als je wil dat hij reset als hij klaar is wel

er treed een reset op tijdens de werking van het programma, nog voor dat het beindigd is

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)

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

> 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.

wat bedoel je met stack overflow.

hoe moet ik da erin zetten. Ik denk dat het dat moet zijn

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 ]

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

> 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.

Op 23 maart 2004 22:27:27 schreef Wouter van Ooijen:
> 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.

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

> 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...

> 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

> 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 ]

> 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