Sida 1 av 1

HI-TIDE problem

Postat: 1 september 2006, 17:21:03
av Henrik Kjellberg
Jag försöker få Hi-tech's pic-utvecklingsmiljö HI-TIDE 3 att funka.
I en tutorial görs ett projekt för en 16F84, genererar lite kod och debuggar detta, vilket funkar alldeles utmärkt.

Nu skulle jag dock försöka göra ett projekt för en 12F629 istället och när jag nu trycker på debug så får jag felmeddelandet "Debugger has been suspended for the following reason: stack overflow occured".

Koden är så minimal den kan bli, nämligen den som autogenereras av programmet:

Kod: Markera allt

#include <htc.h>

void
main(void)
{
	while (1){
		//TODO Auto-generated main function
	}
}
(Som ni ser så länkas det till htc.h, men den länkar vidare till massa andra filer så jag kan inte lägga upp dem här...)

Compilatorn som körs är alltså PicC-Lite i utvecklingsmiljön HI-TIDE (som för övrigt bygger på eclipse) och jag hittar ingen info om felet på HI-TECH's hemsida...

Någon som har en aning om vad felet kan vara?
Vad syftar Stack overflow på? Vilken stack kan det vara?

Postat: 1 september 2006, 18:35:59
av Icecap
En PIC har en begränsat stack till att hålla returadressor vid CALL. På en PIC16F.... är den väl oftast 8 steg men exakt antal beror på vilken modell.

Vad som alltså kanske sker är att det utföras en RETURN för mycket t.ex. eller för många CALL eller liknande.

Postat: 1 september 2006, 20:58:30
av sodjan
Menar du att du kör exakt den kod som du visar ??

Den är ju "tom" !!??
Vet i fasen vad som händer, i värsta fall optimerar kompilatorn bort
hela main() och det blir inte mycket kvar... :-)

Men det är ju bara att du kollar vilken assembler-kod som kompilatorn
spottar ur sig så är det solklart vad den har gjort. Har du kollat ?

Men varför vill du debugga den där koden ??
Verkar lite meningslöst eftersom den inte gör något...

Jag utgår från att du naturligtsvs har verifierat att 12F629 stöds av den
utveckligsmiljö du kör. Annars hade det ju varit lite onödigt att fråga... :-)

Förresten, är detta ett rellativt nytt verktyg ? Alltså HI-TIDE ?
I så fall verkar det väldigt amatörmässigt att ha en tutorial som
bygger på en helt utdöd processor...

Icecap> En PIC har en begränsat stack till att hålla returadressor vid CALL...

Och interrupt ! Glöms ofta bort...
Sen tar ofta debuggern en "nivå" lite beroende på hur den är konstruerad.

Postat: 1 september 2006, 23:26:31
av Henrik Kjellberg
Citat: "Som ni ser så länkas det till htc.h, men den länkar vidare till massa andra filer så jag kan inte lägga upp dem här..."

Så ja, den är tom, så när som på rutinerna som initierar processorn!

Jag kan inte asembler, men har du lust att kolla igenom den så kan jag lägga upp den imorgon (måste upp och jobba imorgonbitti så jag borde gå å lägga mig nu...)

Jag vill debugga den koden för att se om kompilatorn funkar, vilket den ju inte verkar göra. Funkar inte den så kan jag ju omöjligt få något mer avancerat att funka! (jag började med ett blinka lysdioder-projekt som gav samma resultat så jag felsökte mig bakåt...)

Ja den är ny, så jag undrar egentligen oxå varför de valde just den processorn att bygga tutorialen runt, men det är en mycket bra utvecklingsmiljö. (De har precis skaffat Eclipse, som den bygger på, till all java-programering på LTH. Det är där jag hörde talas om den...)

Postat: 6 september 2006, 18:07:17
av Henrik Kjellberg
Tänkte bara säga att jag hittat felet!
Fick detta svaret från tillverkarna av HI-TIDE:

"In the startup code for the 12f629, by default, a call is made to retrieve the OSCAL value from the top of program memory. The simulator doesn't place a retlw instruction at the top of memory to return the oscal value. Because of the two cases above when the call to retrieve OSCAL value is performed the program wraps to the start up code again and the call to retieve the oscal value is done again, and so on until there is a stack overflow.

We will change the simulator for the next release to place a 'retlw 0' at the top of memory for micros that have the oscal configuration.

To workaround the problem turn off the 'Initialize Oscillator from Constrant' option in the 'Runtime' folder for the 'Linker' in the 'C/C++ Build' project properties. The dialog for project properties can be opened by right clicking on the project and selecting 'Propertes...'.

When the option above is turned of the call to retrieve the OSCAL value won't be performed.

--------------------
Adam. HI-TECH Software. "

Nu är det den bästa utväcklingsmiljön jag provat! :D