Problem med "goto" *Problem: Løst!*

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Problem med "goto" *Problem: Løst!*

Inlägg av Tottish »

Hallå. Har suttit med det här ett par timmar nu och googlat och letat i datablad men jag kommer inte på något relevant delvis för att jag inte vet vart jag ska börja då jag verkligen inte fattar vad problemet är.

Läs inte detta stycke om du inte vill. Det är inte särskilt relevant.
Bakgrund: Byggde en liten LED-blinkare av lite mer avancerad art kring en PIC16f88 och allt gick mycket bra i utvecklingsarbetet. Efter nån timme hade jag fått ihop något acceptabelt så jag skulle ta med den in i ett mörkt rum för att se hur det såg ut där. Så jag önskar alltså ersätta lab-agget som nu står för strömförsörjningen med nåt mobilare. Givetvis lyckas jag koppla 7805an åt fel håll och det var den PICen det. Hade bara en av den typen så det fick bli en 16f688 istället då. Ska väl inte vara några problem tänkte jag. Jag hade fel.

Relevant info börjar igen:
Problemet består i att programmet verkar få problem när jag använder goto. Jag kan "assembla" programmet med BUILD SUCCEEDED som sissta rad. Får några messages men inga errors eller warnings i outputförnstret.
När jag resetar debuggern så landar den gröna pilen snällt under RESET-vectorn men när den ska ta sig an "goto init" så blir det problem. Den sticker iväg nånstans där det inte går att följa med den gröna pilen, surrar runt där under 0x9d cykler (i takt med att W räknas ner till noll) och kommer sedan tillbaka med ett stack underflow-meddelande i output fönstret. Jag lade dock märke till att den på första "varvet" i neverland räknar ner från 0x36.
Testade att göra några enklare movlw och movwf direkt i efter reset-vektorn och det gick hur bra som helst men när den kom till goto-kommandot så blev det fel. Fattar ingenting och börjar blir ganska trött på att leta efter ett fel som jag inte förstår hur det kan hända.
Tacksam för hjälp.
Jag ska tillägga att jag vet att programmet i sig inte är felfritt, har inte hunnit med hela "relocation"-processen än. Jag har dock svårt att tro att det är pga det som goto inte fungerar. Vore ju i och för sig inte första gången jag har fel

Bifogar diverse texter:

Sourcecode:

Kod: Markera allt



	list		p=16f688	
	#include	<p16f688.inc>

;Program Configuration Register
	__CONFIG _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTOSCIO


Variables 	UDATA_SHR

Spot1			RES 1	             
Spot2			RES 1
Spot3			RES 1


RESET_VECTOR    CODE    0x000
	goto	init

MAIN	CODE

init
	banksel	ANSEL
	clrf	ANSEL
	
	banksel	TRISC
	clrf	TRISC	;output
	clrf	TRISA	
	
	banksel	PORTA
	clrf	PORTA
	clrf	PORTC
	

   
endloop
	goto endloop 

end

---------
Output efter build:
---------

Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\projekt\letteblinker f688\letteblinker.o".
Clean: Deleted file "C:\projekt\letteblinker f688\letteblinker.lst".
Clean: Deleted file "C:\projekt\letteblinker f688\letterblink.cof".
Clean Warning: File "C:\projekt\letteblinker f688\letterblink.cod" doesn't exist.
Clean: Deleted file "C:\projekt\letteblinker f688\letterblink.hex".
Clean Warning: File "C:\projekt\letteblinker f688\letterblink.lst" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F688 "letteblinker.asm" /l"letteblinker.lst" /e"letteblinker.err" /o"letteblinker.o" /c-
Message[302] C:\PROJEKT\LETTEBLINKER F688\LETTEBLINKER.ASM 24 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\PROJEKT\LETTEBLINKER F688\LETTEBLINKER.ASM 27 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\PROJEKT\LETTEBLINKER F688\LETTEBLINKER.ASM 29 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[305] C:\PROJEKT\LETTEBLINKER F688\LETTEBLINKER.ASM 182 : Using default destination of 1 (file).
Executing: "C:\Program Files\Microchip\MPASM Suite\MPLink.exe" "C:\Program Files\Microchip\MPASM Suite\LKR\16f688i.lkr" "C:\projekt\letteblinker f688\letteblinker.o" /o"letterblink.cof" /M"letterblink.map" /W
MPLINK 4.11, Linker
Copyright (c) 2007 Microchip Technology Inc.
Errors : 0

MP2HEX 4.11, COFF to HEX File Converter
Copyright (c) 2007 Microchip Technology Inc.
Errors : 0

Loaded C:\projekt\letteblinker f688\letterblink.cof.
BUILD SUCCEEDED: Sat Sep 15 17:55:53 2007

------
Output vid körning av programet i debuggern
-----
CORE-E0002: Stack under flow error occurred from instruction at 0x000800
CORE-E0002: Stack under flow error occurred from instruction at 0x000800
... och så vidare ett tiotal rader
-----

Tack!
/Tottish

EDIT: Jag tappade visst formateringen när jag klistrade in den. Som ni ser i Output så verkar allt vara korrekt gällande kolumner.
Såg också något nu som jag missat tidigare. Jag får några warnings i output-fönstert. Detta missade jag för jag hade inte fönstret tillräclkligt "maximerat" i MPLAB men det hängde med i kopieringen. Kanske kan vara relevant?
EDIT2: Insåg att det var dumt att posta så mycket kod när inte ens en liten snutt fungerade så jag bytte ut den mot ett mindre exempel som gav samma fel.
Senast redigerad av Tottish 17 september 2007, 17:16:56, redigerad totalt 5 gånger.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Du har kört return utan först kört call
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Min första spontana tanke är att kompilator, länkare eller emulator har kvar referenser till den gamla processorn. Alltså: har du ändrat från 16F88 till 16F688 på ALLA ställen? Har haft liknande problem med en emulator (helt annan arkitektur) och då var problemet att alla delar i "kompilerings/länknings/debug-kedjan" inte hade rätt information om hårdvaran.

Fungerar det om du skriver ett helt nytt program med enbart en superenkel toggle-led-loop?

(Tips: För att kunna klistra in formaterad kod, använd knappen "Code" när du skriver inlägget!)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Dubbla "init".

> Du har kört return utan först kört call

Var ?
MYcket möjligt, man jag kan inte se var...

> CORE-E0002: Stack under flow error occurred from instruction at 0x000800

Ja men då så... :-)
Och vad ligger det på den adresen då ?
Kolla LST filen !

> Den sticker iväg nånstans där det inte går att följa med den gröna pilen

Varför det ?
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

MickeS: "Du har kört return utan först kört call"
Ja, något sådant är det väl eftersom det är stack underflow som jag får som felmeddelande men vart? Förstår inte det.

oJsan:
Jag tror jag fått med nya processorn över allt. Nytt include, ny .INC fil, ny LKR-fil och ändrat i "device select".
Får det inte att funka hur litet jag än gör programmet. Var ju egentligen väldigt korkat att posta all den koden.
Tack för CODE-tipset. Blev lite snyggare efter det =).


Edit:
Sodjan:
Missade att det var dubbla init i den koden jag postade... Blev lite för mycket klipp och klistra men den generar samma fel oberoende av antalet "init".
Finner ingen adress "000800" i LST-filen.
Varför det inte går att följa med med den gröna pilen vet jag inte. Den "försvinner" helt enkelt under 0x9d (0x36, första gången) cykler för att sedan dyka upp vid resetvektorn igen. För att sedan försvinna på nytt osv..
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Jag läste inte igenom koden kan jag då säga, läste första och sista raden. :D
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Jag vet inte vilken version du har, men MPLab 7,50 (tror jag att det var) kan göra fel med goto. I stället för "goto adress" så blir det bara "goto nästa rad". Och om den hamnar utanför programmet då, så kan den få till alla möjliga instruktioner om det ligger "skräp" i program-minnet (i pic-processorn). Kan det vara nåt sånt? MPLab 7,30 fungerar bättre, har jag för mig.
Senast redigerad av BJ 16 september 2007, 07:07:08, redigerad totalt 1 gång.
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

Kan nog ligga nånting i det. När jag lägger till lite instruktioner efter "goto init" så hoppar den över den första tillagda instruktionen och fortsätter sedan neråt i koden tills den kommer till en goto. Då hoppar den tillbaka ett steg och sitter sedan fast i en loop mellan goto-kommandot och det kommando som föregick det.
Kan inte lägga till mer än ca 5 rader kod under reset vektorn. För många rader så blir det "'RESET_VECTOR' can not fit the absolute section." och Build Failed.
Är det MPLAB som buggar eller jag som håller på att bli sinnessjuk? =)

Kanske någon som har lust att klistra in koden i sitt MPLAB med PIC16F688-inställningar och prova om det går bättre än för mig?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> När jag lägger till lite instruktioner efter "goto init"

Kan du visa ett exempel ?
Bara "jag gjorde det-och-det" säger inte mycket, du kanske beskriver
något annat än det du faktiskt gjorde. Så visa koden.

> När jag lägger till lite instruktioner efter "goto init"

Varför det ? Varför lägga till kod där ??

> För många rader så blir det "'RESET_VECTOR' can not fit the
> absolute section." och Build Failed.

Självklart och förväntat. Som sagt, varför lägga till kod *där* ?
STARTUP sektionen är enbart till för reset och interrupt vektorerna.

> och prova om det går bättre än för mig?

Gärna, men tala bara om *vad* jag ska prova.
Den koden som du visar nu fungerar utmärkt. Den stegar
bara igenom alltihopa och fastar på "goto endloop"...
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

Tack Sodjan, det var precis det jag ville att du skulle prova. Alltså koden som jag lagt upp. För det gör den nämligen inte i _mitt_ MPLAB (flyter på ner till endloop). Så då har vi väl isolerat problemet till att jag ställt in MPLAB fel eller en bug i min version. Antar att jag har ställt in nåt galet men fattar inte för allt i världen vad. Har trippel-checkat allt jag kunde tänka mig 14 gånger.
Anledningen till att jag höll på att flumma med text efter goto init var för att titta om det kunde vara den buggen som BJ snackade om.
Jag får ta och titta på det här imorgon och börja om från början och se vad jag gjort för knas egentligen. Har suttit med detta halva dagen nu och inte gjort ett enda framsteg så man är ju inte på topp direkt.
Tack för all hjäl alla. Skönt att kunna få hjälp med sånt här tok även en lördags kväll.

Ha en fortsatt trevlig helg =)

/Tottish
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Kör ni i samma "läge", du och Sodjan? Kör Sodjan i simulator så kan det ju bli på ett annat sätt än med emulator.... (rätta mig om jag är ute och cyklar nu... programmerar i vanliga fall AVR)
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

Huruvida vi kör i olika lägen eller om detta är möjligt över huvud taget i MPLAB kan säkert Sodjan ge ett bättre svar på än jag. Jag kör iaf med "vanliga" MPLAB mjukvaru-simulatorn som förljer med MPLAB. Alltså "Debugger>select tool>3 MPLAB SIM" och inget annat. Det är väl mig veterligen den enda mjukvarusimulatorn som är "standard" i MPLAB. Har även slagit av "case sensitivity" som det rekomenderas på jescab.se om det nu kan ha betydelse.

EDIT:
Nu när jag kommit hem från en kort runda på stan så startar jag ett nytt projekt och försöker med samma kod. Nu funkar det. *suck*
Vet inte vad som hänt eller vad jag gjort för fel men...
Postar väl igen imorgon om jag får problem med resten av koden. Tror inte att det kommer att ske eftersom jag redan fått koden att fungera på en annan PIC och det här med goto var enda problemet jag hade. När jag tänker efter så testade jag nog aldrig att starta om MPLAB vilket nu är gjort. Kanse kan det vara det, kanske inte. Tack för hjälpen akllihop i alla fall. Hoppas ni får sova lika gott som jag kommer att göra om 5 minuter.
Godnatt.

MVH
/Tottish
BoF
EF Sponsor
Inlägg: 222
Blev medlem: 7 oktober 2006, 16:43:37

Inlägg av BoF »

Tror det har med linker scrip's filen, du använder 16F688i.lkr använd 16F688.lkr istället.
Kanske du gjorde (använde 16F688.lkr) på det nya projektet?
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

Tackar BoF! Det var precis vad som var felet. Jag hade för hög upplösning på skärmen, för dåliga/trötta ögon och satt för långt ifrån för att se det där infernaliska lilla i'et efter 688. Nåja, *det* misstaget gör jag inte om igen.
Tack allihop och sorry för att jag tar er tid med såna här skitsaker men jag försäkrar er om att jag inte postar här om det inte är så att jag är all out of ideas.

MVH
/Tottish
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

LKR filerna som heter någonting med "i" är för att bygga program som
ska debuggas med ICD2.

Om man kollar i MAP filen som skapas när man bygger med "i" filen,
så ser det ganska konstigt ut. Jag har inte analyserat det helt, men jag
gissar att MPASM/MPLINK lägger in ett hopp till den "debugger firmware" som
ICD2 laddar till den target man ska debugga.

Hur som helst, kör med den utan "i"... :-)

Dessutom, du talade just faktiskt om att du använde "i" filen! :-)

> Executing: "C:\Program Files\Microchip\MPASM Suite\MPLink.exe"
> "C:\Program Files\Microchip\MPASM Suite\LKR\16f688i.lkr" <<<=== :-)
> "C:\projekt\letteblinker f688\letteblinker.o" /o"letterblink.cof"
> /M"letterblink.map" /W
Skriv svar