MPLAB beter sig inte som tidigare

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
steppen7
Inlägg: 536
Blev medlem: 27 februari 2007, 20:54:47
Ort: Upplands-Bro

MPLAB beter sig inte som tidigare

Inlägg av steppen7 »

Jag har installerat win7 och tankat ner senaste MPLAB. Nu vill inte tidigare kod kompilera längre. Jag tror jag körde v8.15 eller nåt sånt innan och nu är det 8.46.

Jag får en hel hög med errors:

Kod: Markera allt

Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p12F675 "main.asm" /l"main.lst" /e"main.err" /o"main.o" /d__DEBUG=1 /rDEC
Message[302] C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\MAIN.ASM 25 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 14 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p12F675 "adconv.asm" /l"adconv.lst" /e"adconv.err" /o"adconv.o" /d__DEBUG=1 /rDEC
Error[150]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 12 : Labels must be defined in a code or data section when making an object file
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 12 : Symbol not previously defined (STATUS)
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 12 : Symbol not previously defined (RP0)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 12 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 13 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 14 : Symbol not previously defined (ANSEL)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 14 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 15 : Symbol not previously defined (STATUS)
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 15 : Symbol not previously defined (RP0)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 15 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 16 : Executable code and data must be defined in an appropriate section
Error[150]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 21 : Labels must be defined in a code or data section when making an object file
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 21 : Symbol not previously defined (TEMP1)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 21 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 22 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 23 : Symbol not previously defined (TEMP1)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 23 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 24 : Symbol not previously defined (TEMP1)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 24 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 25 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 26 : Symbol not previously defined (ADCON0)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 26 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 28 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 29 : Symbol not previously defined (delay10us)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 29 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 30 : Symbol not previously defined (bADgo)
Error[128]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 30 : Missing argument(s)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 30 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 31 : Symbol not previously defined (bADgo)
Error[128]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 31 : Missing argument(s)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 31 : Executable code and data must be defined in an appropriate section
Error[150]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 32 : Labels must be defined in a code or data section when making an object file
Error[126]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 32 : Argument out of range (-1 not between 0 and 1023)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 32 : Executable code and data must be defined in an appropriate section
Error[113]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 33 : Symbol not previously defined (ADRESH)
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 33 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 34 : Executable code and data must be defined in an appropriate section
Error[129]   C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\ADCONV.ASM 35 : Expected (END)
Halting build on first failure as requested.
Grundproblemet tycks vara att rutiner och variabler har fått ändrat sitt scope från att gälla globalt till lokalt, typ. Jag har alltid haft en "main.asm" och i den brukar jag inkludera en "defines.asm" i början med alla pinnar och variabler som projektet behöver. Sen inkluderar jag hjälprutiner typ "adconv.asm", "delay.asm", lcd.asm" osv sist i "main.asm". Det har alltid funkat fint, men nu verkar MPLAB jobba helt annorlunda. Den klagar på att definitioner inte finns osv. Inkluderar man tex "defines.asm" i hjälprutinerna klagar den på att det blir dubbelt istället.

Jag har provat att switcha mellan relocatable och absolute men det blir knas med båda. Har jag missat nån inställning nånstans? Otroligt störande att sitta flera timmar när jag bara skulle rafsa ihop en liten fläktkontroller.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: MPLAB beter sig inte som tidigare

Inlägg av bearing »

Prova att skapa ett nytt MPLAB-projekt och lägga till samma källkodsfiler. Kolla också att MPLAB är "case insensitive" ifall du använt det förut.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MPLAB beter sig inte som tidigare

Inlägg av sodjan »

> ...Sen inkluderar jag hjälprutiner typ "adconv.asm",...

Vad menar du ingetligen med "inkluderar" ?
I samma källkod genom #include eller som en källkodsfil i projektet ?
Eller både och samtidigt ?

Enligt loggen så ser det ut som att t.ex adconv.asm separat-assembleras
och då ska den *inte* samtidigt finnas med via en #include i main.asm !

De övriga filen är bara logiska följdfel till det...
steppen7
Inlägg: 536
Blev medlem: 27 februari 2007, 20:54:47
Ort: Upplands-Bro

Re: MPLAB beter sig inte som tidigare

Inlägg av steppen7 »

Jag menar att jag använder #include "adconv.asm" i "main.asm", det är så jag brukar göra, sen kanske det är ett föråldrat sätt men det är en annan historia. Du har rätt i att jag har lagt in adconv.asm även i projektträdet så det kanske det som är felet, jag ska kolla när jag kommer hem efter jobbet.

Men det är konstigt att mitt näst senaste projekt inte kompilerar längre utan att jag har petat på det. Ska kolla om även detta har filer inkluderade i projektträdet.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MPLAB beter sig inte som tidigare

Inlägg av sodjan »

OK, om du har en ASM fil som är tänkt för att inkluderas med #include så saknar den
sannolikt korrekta CODE, DATA direktiv o.s.v. D.v.s att den kommer att ge diverse
olika fel när MPLAB försöker asemblera den separat för sig själv, vilket du ju också
märkte, eller hur ?

Om du läger in en ASM fil i projektet som en "source file" så betyder det att du *vill*
att det ska separat asembleras. Om du bara vill ha den där så att du enkelt
t.ex kan öppna och redigera filen, så lägger du den i "other files" (eller vad det nu
heter).

> det är så jag brukar göra, sen kanske det är ett föråldrat sätt men det är en annan historia.

Nja, det är kanske inte så snyggt, men det är en annan sak... :-)
Dessutom är det ju så att *all* kod (även den i filerna som du gör #include på)
ju assembleras om varje gång. Vid separat asemblering så byggs bara de filer som
är ändade om (eller som har beroenden mot andra filer som är ändrade).
steppen7
Inlägg: 536
Blev medlem: 27 februari 2007, 20:54:47
Ort: Upplands-Bro

Re: MPLAB beter sig inte som tidigare

Inlägg av steppen7 »

Nu har jag kollat. Alla assembleringsfel försvann när jag flyttade adconv.asm etc till "other files". Som du förklarade så var det ju ganska logiskt att det blev som det blev. Däremot får jag då fel från linkern. Samma sak var det med det gamla projektet som fungerade tidigare, där hade jag enbart en main.asm under "source files" och felet jag får är också från linkern. Felen i projekten är:

Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000000, length=0x000000b0

Respektive:
Error - section '.org_2' can not fit the absolute section. Section '.org_2' start=0x00000004, length=0x0000028c

Jag trodde det hade med RAM-allokeringen först men nu upptäckte jag precis att det har med programminnet att göra. Tar jag bort en instruktion minskar "length" i felmeddelandet.

EDIT: Måste man kapitulera och göra om allt med UDATA och CODE och allt vad det heter för att få lite flyt?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: MPLAB beter sig inte som tidigare

Inlägg av Icecap »

Lösningen: Gör en jump till startkoden och ISR'n vid dessa 2 lokationer, då fungerar allt igen.

Vid adress 0000 och 0004 kan det bara ligga en klump på vardera 4 bytes varför ett jump varje ställe löser detta.
steppen7
Inlägg: 536
Blev medlem: 27 februari 2007, 20:54:47
Ort: Upplands-Bro

Re: MPLAB beter sig inte som tidigare

Inlägg av steppen7 »

Jag har alltid gjort såhär:

org 0x00
goto reset

org 0x04
include "interrupt.asm"

Men det funkar alltså inte att göra så längre?
steppen7
Inlägg: 536
Blev medlem: 27 februari 2007, 20:54:47
Ort: Upplands-Bro

Re: MPLAB beter sig inte som tidigare

Inlägg av steppen7 »

Riktigt så enkelt var det nog inte...
Nu har jag plockat bort alla extra filer och kör enbart main.asm. Oavsett om jag väljer relocatable eller absolute så blir det fel om programkoden överstiger adress 0x001F. Dvs det fungerar att kompilera om programmet är extremt kort, annars blir det fel.

Kör jag relocatable klagar den som tidigare:
Error - section '.org_3' can not fit the absolute section...

Kör jag absolute säger den:
Error[118] C:\ELEKTRONIK\PROJEKT\FANCONTROLLER\SW\MAIN.ASM 48 : Overwriting previous address contents (0020)
:humm:
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: MPLAB beter sig inte som tidigare

Inlägg av v-g »

Detta är ur en standardmall och har alltid fungerat för mig.

Kod: Markera allt

RESET_VECTOR	CODE	0x0000
	GOTO	Init		;go to start of Init code

;******************************************************************************
;High priority interrupt vector
; This code will start executing when a high priority interrupt occurs or
; when any interrupt occurs if interrupt priorities are not enabled.

HI_INT_VECTOR	CODE	0x0008

		bra	HighInt		;go to high priority interrupt routine

;******************************************************************************
;Low priority interrupt vector
; This code will start executing when a low priority interrupt occurs.
; This code can be removed if low priority interrupts are not used.

LOW_INT_VECTOR	CODE	0x0018

		bra	LowInt		;go to low priority interrupt routine

;******************************************************************************
;High priority interrupt routine
; The high priority interrupt code is placed here.

Highint_CODE CODE

HighInt

;	*** high priority interrupt code goes here ***


		RETFIE	FAST

;******************************************************************************
;Low priority interrupt routine
; The low priority interrupt code is placed here.
; This code can be removed if low priority interrupts are not used.

LowInt
		MOVFF	STATUS,STATUS_TEMP	;save STATUS register
		MOVFF	WREG,WREG_TEMP		;save working register
		MOVFF	BSR,BSR_TEMP		;save BSR register

;	*** low priority interrupt code goes here ***


		MOVFF	BSR_TEMP,BSR		;restore BSR register
		MOVFF	WREG_TEMP,WREG		;restore working register
		MOVFF	STATUS_TEMP,STATUS	;restore STATUS register
		RETFIE

;******************************************************************************

; Init code starts here
Init_CODE CODE
Init

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

Re: MPLAB beter sig inte som tidigare

Inlägg av sodjan »

> ...Däremot får jag då fel från linkern...

Det betyder att du kör relocatable mode. Bra, det är att rekomendera.

> Oavsett om jag väljer relocatable eller absolute

Alltså, hur fasen menar du här igentligen ??
Du måste ju ändra en *hel del* i koden, det är inget du bara "väljer"
med ett litet klick här eller där. Så vad menar du igentligen med
att du "väljer" mode ??

> Jag har alltid gjort såhär:
>
> org 0x00

Right, "ORG" alltså. Det betyder att du kör absolute mode och inget annat.
I relocatable används inte ORG, utan CODE som gör "rätt" sak.

Du måste bestämma dig. Rekomendationen är naturligtsvis relocatable, det är
mer modernt och mer likt traditionell programmering i andra/större system.

Är det ett gammalt system som du inte räknar med att vidareutveckla eller
att kanske återanvända koden i nya projekt, så kan du ju alltid låta det ligga
kvar som absolute. Men ändra gärna inför nya projekt i så fall !
steppen7
Inlägg: 536
Blev medlem: 27 februari 2007, 20:54:47
Ort: Upplands-Bro

Re: MPLAB beter sig inte som tidigare

Inlägg av steppen7 »

Jag har alltid kört med "org" i min kod. Det var väl det enda sättet när jag började pilla med 16C84 för 15år sen och det har hängt kvar.

Att jag väljer mellan absolute och relocatable menar jag att jag testade relocatable som inställning i projektet som ett vildskott för att se om det funkade, eftersom jag inte hade 100 koll på skillnaden, men nu vet jag att det kräver "CODE" och annat. Visst kan jag gå över till relocatable, det är väl kanske dags nu då, men jag hatar att gå runt ett problem istället för att lösa det.

Nu upptäckte jag en grej, det verkar som att MPLAB blandar ihop programminnet med RAM-allokeringen. Jag allokerar minne från 0x20 det är därför den klagar på att programkoden skriver över där. Nu är lösningen nära, men varför i helsike gör den så helt plötsligt?

Typ så här genererar alltså fel nu:
org 0x20
ramminne1 res 1
ramminne2 res 1

org 0x20
[programkod]

Men det har funkar i många år för mig...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MPLAB beter sig inte som tidigare

Inlägg av sodjan »

> Typ så här genererar alltså fel nu:

Ganska ointressant att veta utan att även se *vilka* fel du får.

> org 0x20
> ramminne1 res 1
> ramminne2 res 1

ORG är för absolute och RES är för relocatable.
Som jag sa, du bör nog bestämma dig vilket du vill köra.
Det gör allt mycket enklare, oavsett *hur* du bestämmer dig.

> Men det har funkar i många år för mig...

Hm. Det finns vissa konstruktioner som kan passera både abs och reloc,
manualen har detaljerna. Men jag vet inte om det är någon direkt fördel
att köra så, även om man lyckas att få det att "fungera" ibland...

> Jag allokerar minne från 0x20 det är därför den klagar på att programkoden skriver över där.

Knappast. Programminne och RAM/GPR är två helt skilda adress-areor. Adress 0x20
i programinnet är alltså något helt annat än adress 0x20 i RAM/GPR. Helt olika.
Kod och variabler kan *aldrig* skriva över varandra i en Harward arkitektur.
steppen7
Inlägg: 536
Blev medlem: 27 februari 2007, 20:54:47
Ort: Upplands-Bro

Re: MPLAB beter sig inte som tidigare

Inlägg av steppen7 »

>Ganska ointressant att veta utan att även se *vilka* fel du får.

Ok jag kanske var otydlig, men jag menar samma fel 118 som jag skrev om ovan.

>ORG är för absolute och RES är för relocatable.
>Som jag sa, du bör nog bestämma dig vilket du vill köra.

Ok det är så alltså. Hmm, jag körde ju rubbet med absoluta adresser när jag lärde mig PIC för 15 år sen och då skrev jag en adress för varje byte jag ville allokera, sen var det nån som lärde mig några år senare (kanske 10 år sen) att man kunde allokera RAM med "org" och "res" istället så kunde man ju byta plats på och sortera registren för snyggare kod utan att behöva skriva om alla adresser i följd (som man vill för att kunna se vilken den sista upptagna adressen är). Inget ord om relocatable hörde jag då, och det har som sagt fungerat i typ 10 år.

>Knappast. Programminne och RAM/GPR är två helt skilda adress-areor

Jag vet, det är därför jag tycker det är så konstigt. Flyttar jag RAM allokeringen till tex 0x30 så får jag plats med programkod upp till 0x2F innan den klagar (error 118). Den tycker alltså att mina RAM allokeringar med "res" hamnar i programminnet. Jaja, om "res" hör till relocatable så har det väl antagligen smugit sig in nån bugg i senaste MPLAB som visar sig när man blandar ihop relocatable och absolute.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MPLAB beter sig inte som tidigare

Inlägg av sodjan »

Jo, det är möjligt att kombinationen ORG/RES även fungerar så där.
Så här säger hjälpfilen till MPASM/MPLINK :
In relocatable code (using MPLINK linker), res can be used to reserve data storage.
In non-relocatable code, label is assumed to be a program memory address.
Det där om "program memory" address låter ju märkligt och sannolikt inte vad du ville, eller ?

Och vidare:
This directive is used in the following types of code: absolute or relocatable.
For information on types of code, see Assembler Operation.

The most common usage for res is for data storage in relocatable code.
Notera "the most common usage..."

Mitt förslag/råd är att du börjar köra "ren" relocatable mode och inte blandar.
Skriv svar