Kan inte kompilera koden (PIC16F886)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Kan inte kompilera koden (PIC16F886)

Inlägg av Klas-Kenny »

Jag skulle skriva ett program till en PIC16F886, och jag har aldrig tidigare programmerat den modellen.

Dock när jag testade kompilera den lilla kod jag skrivit, gick det inte, testade med en "Template" för PIC16F886:

Kod: Markera allt

;**********************************************************************
;   This file is a basic code template for object module code         *
;   generation on the PIC16F886. This file contains the               *
;   basic code building blocks to build upon.                         *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler and linker (Document DS33014).          *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:      xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required: P16F886.INC                                      *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************

    list        p=16f886    ; list directive to define processor
    #include    <p16f886.inc>   ; processor specific variable definitions

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

    __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

;***** VARIABLE DEFINITIONS (examples)

; example of using Shared Uninitialized Data Section
INT_VAR     UDATA_SHR   
w_temp      RES     1       ; variable used for context saving
status_temp RES     1       ; variable used for context saving
pclath_temp RES     1       ; variable used for context saving

; example of using Uninitialized Data Section
TEMP_VAR    UDATA           ; explicit address specified is not required
temp_count  RES     1       ; temporary variable (example)

;**********************************************************************
RESET_VECTOR    CODE    0x0000 ; processor reset vector
    nop
    goto    start              ; go to beginning of program

INT_VECTOR      CODE    0x0004 ; interrupt vector location

INTERRUPT

    movwf   w_temp          ; save off current W register contents
    movf    STATUS,w        ; move status register into W register
    movwf   status_temp     ; save off contents of STATUS register
    movf    PCLATH,w        ; move pclath register into w register
    movwf   pclath_temp     ; save off contents of PCLATH register

; isr code can go here or be located as a call subroutine elsewhere

    movf    pclath_temp,w       ; retrieve copy of PCLATH register
    movwf   PCLATH          ; restore pre-isr PCLATH register contents
    movf    status_temp,w       ; retrieve copy of STATUS register
    movwf   STATUS          ; restore pre-isr STATUS register contents
    swapf   w_temp,f
    swapf   w_temp,w        ; restore pre-isr W register contents
    retfie              ; return from interrupt

MAIN_PROG       CODE

start

; remaining code goes here

; example of preloading EEPROM locations

EE  code  0x2100
    DE 5,4,3,2,1

    END                       ; directive 'end of program'

Samma fel:

Kod: Markera allt

----------------------------------------------------------------------
Debug build of project `C:\Users\Klas-Kenny\Desktop\My Dropbox\PIC-saker\UV\UV-box.mcp' started.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe v4.37
Preprocessor symbol `__DEBUG' is defined.
Wed Oct 20 22:47:55 2010
----------------------------------------------------------------------
Make: The target "C:\Users\Klas-Kenny\Desktop\My Dropbox\PIC-saker\UV\16F886TMPO.o" is out of date.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F886 "C:\Program Files (x86)\Microchip\MPASM Suite\Template\Object\16F886TMPO.ASM" /l"16F886TMPO.lst" /e"16F886TMPO.err" /o"16F886TMPO.o" /d__DEBUG=1
Make: The target "C:\Users\Klas-Kenny\Desktop\My Dropbox\PIC-saker\UV\UV-box.cof" is out of date.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p16F886 "16F886TMPO.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"UV-box.cof" /M"UV-box.map" /W
MPLINK 4.37, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Error - section '.config_2007_16F886TMPO.O' can not fit the absolute section. Section '.config_2007_16F886TMPO.O' start=0x00002007, length=0x00000002
Errors    : 1

Link step failed.
----------------------------------------------------------------------
Debug build of project `C:\Users\Klas-Kenny\Desktop\My Dropbox\PIC-saker\UV\UV-box.mcp' failed.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe v4.37
Preprocessor symbol `__DEBUG' is defined.
Wed Oct 20 22:48:00 2010
----------------------------------------------------------------------
BUILD FAILED

Hur ska jag rätta till detta? :(
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47002
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av TomasL »

Du använder nog felaktig länkningsfil, brukar sluta på .lkr där definieras de olika minnesområdena, osv, vilka är olika för olika PICar.
Alternativt saknar du länkningsfilen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av sodjan »

Version på MPLAB ?

Fungerar direkt "out-of-the-box" i 8.53 alla fall.

Notera att nyare MPLAN automatiskt väljer LKR fil, man
behöver inte längre ange den i "Linker Script" i projektrutan.
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av Klas-Kenny »

har version 8.56, alltså senaste.

Först hade jag inte lagt till linker själv, testade lägga till "16f886_g.lkr" nu, samma resultat.

Edit: Dock verkar det som att den LKR-filen inte innehåller någonting? :humm:

Sodjan: Skulle du kunna ladda upp din LKR-fil för 16F886 på någon filhost och länka, så jag kan testa den?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av sodjan »

Den är inte så stor, kan lika gärna lägga den här;

Kod: Markera allt

// Sample linker command file for 16F886

LIBPATH  .

CODEPAGE   NAME=page0    START=0x0      END=0x7FF
CODEPAGE   NAME=page1    START=0x800    END=0xFFF
CODEPAGE   NAME=page2    START=0x1000   END=0x17FF
CODEPAGE   NAME=page3    START=0x1800   END=0x1FFF
CODEPAGE   NAME=.idlocs  START=0x2000   END=0x2003   PROTECTED
CODEPAGE   NAME=.config  START=0x2007   END=0x2008   PROTECTED
CODEPAGE   NAME=eedata   START=0x2100   END=0x21FF   PROTECTED

DATABANK   NAME=sfr0     START=0x0      END=0x1F     PROTECTED
DATABANK   NAME=sfr1     START=0x80     END=0x9F     PROTECTED
DATABANK   NAME=sfr2     START=0x100    END=0x10F    PROTECTED
DATABANK   NAME=sfr3     START=0x180    END=0x18F    PROTECTED

DATABANK   NAME=gpr0     START=0x20     END=0x6F
DATABANK   NAME=gpr1     START=0xA0     END=0xEF
DATABANK   NAME=gpr2     START=0x110    END=0x16F
DATABANK   NAME=gpr3     START=0x190    END=0x1EF

SHAREBANK  NAME=gprnobnk START=0x70     END=0x7F
SHAREBANK  NAME=gprnobnk START=0xF0     END=0xFF     PROTECTED
SHAREBANK  NAME=gprnobnk START=0x170    END=0x17F    PROTECTED
SHAREBANK  NAME=gprnobnk START=0x1F0    END=0x1FF    PROTECTED

SECTION    NAME=PROG1    ROM=page0      // ROM code space - page0
SECTION    NAME=PROG2    ROM=page1      // ROM code space - page1
SECTION    NAME=PROG3    ROM=page2      // ROM code space - page2
SECTION    NAME=PROG4    ROM=page3      // ROM code space - page3
SECTION    NAME=IDLOCS   ROM=.idlocs    // ID locations
SECTION    NAME=DEEPROM  ROM=eedata     // Data EEPROM
Notera speciellt raden med "NAME=.config", skilljer den sig från din ?
Jag undrar lite över det eftersom dina felutskriften pakade speciellt mot "config"...

Sen en annan sak, "Preprocessor symbol `__DEBUG' is defined.", är det avsiktligt ?
Det fungerade i och för sig lika bra för mig även med MPSIM valt (så att __DEBUG används)...

Annars gjorde jag inget speciellt, tog ett annat gammalt projekt och bytte ut
koden till din samt ändrade "Configure" -> "Select Device" till PIC16F886.

Jag tog även min kopia av 16F886TEMO.ASM och det fungerar också helt OK.
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av Klas-Kenny »

Jag har inte ändrat den koden jag postade någonting, det är bara en template.

Men nu med din linker fungerar det i alla fall! :D

Undrar varför den va tom :?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av sodjan »

Alltså helt tom/blank ? Ja, lite märkligt...
Är det fler filer i LKR katalogen som är tomma ?
Det brode vara lätt att se vilka som inte är 2/3/4 KB eller så...
Kan du av misstag ha haft den uppe i någon editor och råkat spara ?
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av Klas-Kenny »

Verkar inte vara någon mer som är tom.

Med tanke på att jag aldrig tidigare programmerat just denna µC, och jag gjorde som vanligt, gick igenom "Project wizard", skrev kod, och försökte kompilera men det fungerar inte.

Så, ända gången risken att jag skulle kunnat lyckas tömma den själv är om jag någon gång tidigare för länge sedan klickat upp den filen utan att veta vad det va, och på något sätt raderat innehållet, men det har jag svårt för att tro :?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av sodjan »

Hm, och du vill sannolikt inte höra vad jag tror... :-)
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av Klas-Kenny »

Antagligen inte :D

Huvudsaken är att det fungerar nu i alla fall :tumupp:
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av vfr »

Vad säger datumet på LKR-filen? När ändrades den senast? Om det är ett alldeles nytt datum/tid så kan det ju indikera att du eller något på din dator faktiskt sparat den. Avsiktligt eller oavsiktligt.
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av Klas-Kenny »

Igår, men det är ju inte så konstigt eftersom jag medvetet la in ny kod i den igår (Den jag fick här i tråden..) :wink:
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av vfr »

Jag tolkade det som att du tagit en standardfil rakt av och inte gjort några ändringar alls. Men då måste du ju rimligen haft kontroll på filen när du ändrade i den, och något har inträffat senare. Tidpunkten kan ju ge en ledtråd jämfört med vad du själv sysslade med igår.
Användarvisningsbild
Klas-Kenny
Inlägg: 11843
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av Klas-Kenny »

Alltså, filen va tom igår när jag skulle kompilera, och det fungerade inte.

Fick sedan ny kod för den filen av Sodjan, la in den koden i standardfilen, som va tom, och där med visar den ju att senaste redigeringen skedde igår (23.38).
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Kan inte kompilera koden (PIC16F886)

Inlägg av vfr »

Aha. Då är jag med. Nej då är det ju tyvärr försent att utläsa något sådant. :)
Skriv svar