"Halted due to PC incrementing" - Error, PIC 12F629

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: "Halted due to PC incrementing" - Error, PIC 12f629

Inlägg av sodjan »

Ja, jag tänkte på det också.
Om man har "slarvat bort" RETLW instruktionen
som ska ligga där så blir det den effekten... :-)

Att jag inte brydde mig berodde på att jag tror att
det sas att det hela fungerade "ett tag". CALL till 3FF
är ju nästan det första som sker !?
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: "Halted due to PC incrementing" - Error, PIC 12f629

Inlägg av bearing »

I simulatorn syns aldrig den instruktionen, väl? Den ligger i kretsens FLASH från fabriken?

Fast det verkar ju konstigt om alla program som använder läser OSCCAL från FLASH kommer ger felmeddelande i simulatorn. Är det kanske "errorlevel -302" ett försök att få simulatorn att ignorera felet?

Programmet verkar dock inte starta om från 0 efter anropet till 0x3FF i simulatorn. Om man lägger en nop på adress 0x3FF kommer programmet returnera från anropet efter att den exekverat NOP. Fungerar kretsen så i verkligheten också, att den hoppar till adressen som ligger i stacken när den passerar slutet på FLASH?

Simulatorn ger inget felmeddelande om man stegar förbi call 0x3FF.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: "Halted due to PC incrementing" - Error, PIC 12f629

Inlägg av sodjan »

Nja, det är ju en helt vanlig instruktion som råkar ligga på en lite speciell
plats (sist i minnet), men annars är det inget konstigt med den.

Men, hm, du har en poäng där, om nu inte MPSIM vet om att det
ligger en RETLW där, vad händer då ?

Lite Googling ger också bl.a en rekomendation att kommentera bort
"CALL 0x3FF" under simuleringen, det har i alla fall ingen påverkan på
simuleringen som sådan. Och MPSIM får tydligen också lite "problem" om
man inte också har en RETLW instruktion på adress 0x3FF i själva koden.
Enklast att kommentera bort CALL'et...

> Är det kanske "errorlevel -302" ett försök att få simulatorn att ignorera felet?

OK, jag (och du!) kan slå upp det, men har inte 302 med den vanliga
varningen om "register not in bank 0" att göra? Kollar, jo det har det...

> Fungerar kretsen så i verkligheten också, att den hoppar till adressen som
> ligger i stacken när den passerar slutet på FLASH?

Njae, den "wrappar runt" och kommer tillbaka till 0, det blir som en reset,
inte som en return. Däremot kommer sannolikt SIM att larma för "stack overflow"
eftersom man kommer att göra flera CALL 0x3FF utan RETURN (eller RETLW) mellan.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: "Halted due to PC incrementing" - Error, PIC 12f629

Inlägg av bearing »

>Njae, den "wrappar runt" och kommer tillbaka till 0, det blir som en reset,
>inte som en return. Däremot kommer sannolikt SIM att larma för "stack overflow"
>eftersom man kommer att göra flera CALL 0x3FF utan RETURN (eller RETLW) mellan.

Det var det här beteendet jag också väntade mig. Men i MPSIM blir det inte en "wrap around", utan det blir som om processorn exekverat RETURN eller RETLW i slutet av FLASH, trots att instruktionen saknas. Programpekaren hoppar från slutet av FLASH till instruktionen som kommer efter CALL 0x3FF och kör vidare. Programmet slår alltså inte runt och fastnar i en evig loop. Varningen om att programmet slagit runt kommer då CALL-instruktionen körs, d.v.s innan den NOP som jag lagt på adress 0x3FF körs.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: "Halted due to PC incrementing" - Error, PIC 12F629

Inlägg av PopUnoNkoK »

Ja då har ni hittat problemet.

Va underbart att läsa när riktigt kunniga har diskuterat mitt problem.

Kodsnutten som där den "problematiska" CALL instruktionen fans kommer från Microchips Template. Jag kollade på den som snabbast när jag började koden och läste kommentaren:
Micrichip skrev:; OSCCAL RESTORE (not required if internal OSC is not used)
Då jag för tillfället använder Internal OSC så behövs den alltså inte men koden är tänkt att bli en stegmotorstyrd klocka så tanken är att ha en extern kristall i slutändan så jag tänkte att jag låter kodsnutten vara kvar.
Jag reflekterade aldrig över att det var en CALL instruktione till "ingenstans" i koden. (Ingenstans skriver jag då jag inte hade någon aning om att det fans "hårdknackad" kod i PICen från start)

Nu fungerar alltså koden precis som jag vill. Tusen tack. Nu väntar jag bara på hårdvaran så jag får börja testa på riktigt.


PS En liten fråga.

Kod: Markera allt

		BANKSEL	OPTION_REG
		MOVLW	b'00000000'		;Här sätter vi prescaler på de sista 3 bitarna
	[b]185[/b]	MOVWF	OPTION_REG

		BANKSEL	TRISIO
		MOVLW	b'00100000'			
	[b]189[/b]	MOVWF	TRISIO			;Sätter alla I/O till utgångar, Utom MCLR
	
Har lagt till radnummer

Ger:

Kod: Markera allt

Message[302] C:\PICPROG\STEGMOTORSTYRNING\12F629TMPO.ASM [b]185[/b] : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\PICPROG\STEGMOTORSTYRNING\12F629TMPO.ASM [b]189[/b] : Register in operand not in bank 0.  Ensure that bank bits are correct.
Detta är juh bara ett Message, inget error men i alla fall. Jag har juh en BankSel precis före. Jag kan inte förstå varför den säger att det är i fel bank.
Jag gissar att det är denna typ avv meddelanden man brukar "tabort" med hjälp av ERRORLEVEL men jag blir ändå nyfiken.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: "Halted due to PC incrementing" - Error, PIC 12F629

Inlägg av PopUnoNkoK »

Ja då har ni hittat problemet.

Va underbart att läsa när riktigt kunniga har diskuterat mitt problem.

Kodsnutten som där den "problematiska" CALL instruktionen fans kommer från Microchips Template. Jag kollade på den som snabbast när jag började koden och läste kommentaren:
Micrichip skrev:; OSCCAL RESTORE (not required if internal OSC is not used)
Då jag för tillfället använder Internal OSC så behövs den alltså inte men koden är tänkt att bli en stegmotorstyrd klocka så tanken är att ha en extern kristall i slutändan så jag tänkte att jag låter kodsnutten vara kvar.
Jag reflekterade aldrig över att det var en CALL instruktione till "ingenstans" i koden. (Ingenstans skriver jag då jag inte hade någon aning om att det fans "hårdknackad" kod i PICen från start)

Nu fungerar alltså koden precis som jag vill. Tusen tack. Nu väntar jag bara på hårdvaran så jag får börja testa på riktigt.


PS En liten fråga.

Kod: Markera allt

		BANKSEL	OPTION_REG
		MOVLW	b'00000000'		;Här sätter vi prescaler på de sista 3 bitarna
	[b]185[/b]	MOVWF	OPTION_REG

		BANKSEL	TRISIO
		MOVLW	b'00100000'			
	[b]189[/b]	MOVWF	TRISIO			;Sätter alla I/O till utgångar, Utom MCLR
	
Har lagt till radnummer

Ger:

Kod: Markera allt

Message[302] C:\PICPROG\STEGMOTORSTYRNING\12F629TMPO.ASM [b]185[/b] : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\PICPROG\STEGMOTORSTYRNING\12F629TMPO.ASM [b]189[/b] : Register in operand not in bank 0.  Ensure that bank bits are correct.
Detta är juh bara ett Message, inget error men i alla fall. Jag har juh en BankSel precis före. Jag kan inte förstå varför den säger att det är i fel bank.
Jag gissar att det är denna typ avv meddelanden man brukar "tabort" med hjälp av ERRORLEVEL men jag blir ändå nyfiken.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: "Halted due to PC incrementing" - Error, PIC 12F629

Inlägg av sodjan »

>
Micrichip skrev:; OSCCAL RESTORE (not required if internal OSC is not used)
> Då jag för tillfället använder Internal OSC så behövs den alltså inte

Läs igen. :-)

> Jag kan inte förstå varför den säger att det är i fel bank.

Det gör den inte. Läs igen...
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: "Halted due to PC incrementing" - Error, PIC 12F629

Inlägg av PopUnoNkoK »

; OSCCAL RESTORE (not required if internal OSC is not used
Haha, ja den var ju lätt att se att jag läst "felvänt och upp å ner". :) My bad!

Den andra var lite klurigare.
Register in operand not in bank 0. Ensure that bank bits are correct.
Egentligen är texten inte ett problem att tolka utan det handlar mer om varför kompilatorn skriver det.
Menar den, kompilatorn alltså, helt enkelt:
"Du, håll lite extra koll nu, registret är inte i bank 0 (Defaultbanken?). Dubbelkolla att du gjort rätt".

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

Re: "Halted due to PC incrementing" - Error, PIC 12F629

Inlägg av sodjan »

Korrekt.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: "Halted due to PC incrementing" - Error, PIC 12F629

Inlägg av PopUnoNkoK »

Strålande.
Tack för hjälpen.
Skriv svar