Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Errore linker

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Errore linker

Messaggioda Foto Utenterudj » 10 feb 2014, 22:07

ciao a tutti, sto seguendo la guida PIC by example di Tanzilli per iniziare con i PIC, finché compilo con MPASM tutto ok, se però incollo lo stesso file su MPLAB mi da questo errore:

"E:\Programmi\Microchip\MPLABX\mpasmx\mplink.exe" -p16f84a -w -x -u_DEBUG -z__ICD2RAM=1 -m"dist/default/debug/int.X.debug.map" -z__MPLAB_BUILD=1 -z__MPLAB_DEBUG=1 -odist/default/debug/int.X.debug.cof build/default/debug/int.o
make[2]: *** [dist/default/debug/int.X.debug.cof] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
MPLINK 5.00, LINKER
Device Database Version 1.17
Copyright (c) 1998-2013 Microchip Technology Inc.
Error - section '.org_2' can not fit the absolute section. Section '.org_2' start=0x00000004, length=0x0000004c
Errors : 1

make[2]: Leaving directory `E:/Documents and Settings/Rudy/MPLABXProjects/int.X'
make[1]: Leaving directory `E:/Documents and Settings/Rudy/MPLABXProjects/int.X'

BUILD FAILED (exit value 2, total time: 906ms)

il codice scritto da tanzilli è il seguente:

Codice: Seleziona tutto
PROCESSOR 16F84
RADIX DEC
INCLUDE "P16F84.INC"
;Setup of PIC configuration flags
;XT oscillator
;Disable watch dog timer
;Enable power up timer
;Disable code protect
__CONFIG 3FF1H
LED1 EQU 0
LED2 EQU 1
LED3 EQU 2
LED4 EQU 3
ORG 0CH
Count RES 2
nTick RES 1 ;Registro utilizzato per contare il numero di
;lampeggi del LED 1
;Reset Vector
;Punto di inizio del programma al reset della CPU
ORG 00H
;Salta al corpo principale del programma. Questo jump ? necessario
;per evitare tutta la parte di codice per la gestione degli
;interrupt.
goto Start
;Interrupt vector
;Punto di inizio per tutte le subroutine di gestione degli interrupt
ORG 04H
;**********************************************************************
; Interrupt handler
;**********************************************************************
;Accende il led 2 per segnalare che c'e' stato un interrupt
bsf PORTB,LED2
;Inizializza il contatore di lampeggi del LED1
movlw 3
movwf nTick
;Azzera nuovamente il flag RBIF per consentire all'interrupt di
;ripetersi
bcf INTCON,RBIF
;Ritorna al programma principale
retfie
;**********************************************************************
; Programma principale
;**********************************************************************
Start:
;Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB
bsf STATUS,RP0
;Definizione delle linee di I/O (0=Uscita, 1=Ingresso)
;Definizione della porta A
movlw 00011111B
movwf TRISA & 7FH
;Definizione della porta B
;Le linee da RB0 a RB3 vengono programmate in uscita per essere collegate ai quattro
led
;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate ai quattro
pulsanti
movlw 11110000B
movwf TRISB & 7FH
;Commuta sul primo banco dei registri
bcf STATUS,RP0
;Spegne tutti i led collegati sulla porta B
bcf PORTB,LED1
bcf PORTB,LED2
bcf PORTB,LED3
bcf PORTB,LED4
;Abilita l'interrupt sul cambiamento di stato delle linee RB4,5,6,7
movlw 10001000B
movwf INTCON
;**********************************************************************
; Loop principale
;**********************************************************************
MainLoop
call Delay ;Ritardo software
btfss PORTB,LED1 ;Led acceso ?
goto TurnOnLed1 ;No, lo accende
goto TurnOffLed1 ;Si, lo spegne
;Accensione led e decremento del contatore di lampeggi
TurnOnLed1
bsf PORTB,LED1
;Controlla se LED 2 di segnalazione dell'interrupt e' gia acceso.
;Se e' acceso decrementa il contatore nTick ad ogni lampeggio di
;LED1. Quando nTick vale 0 spegne LED 2
btfss PORTB,LED2 ;LED2 acceso ?
goto MainLoop ;No, continua a lampeggiare
decf nTick,1 ;Si, decrementa nTick
btfss STATUS,Z ;nTick = 0 ?
goto MainLoop ;No, continua a lampeggiare
bcf PORTB,LED2 ;Si, spegne LED2
goto MainLoop ;Continua a lampeggiare
;Spegnimento led
TurnOffLed1
bcf PORTB,LED1 ;Spegne LED 1
goto MainLoop ;Continua a lampeggiare
;**********************************************************************
; Subroutine
;**********************************************************************
;Subroutine di ritardo software
Delay
clrf Count
clrf Count+1
DelayLoop
decfsz Count,1
goto DelayLoop
decfsz Count+1,1
goto DelayLoop
return
END


che c'è che non va?
Avatar utente
Foto Utenterudj
25 5
New entry
New entry
 
Messaggi: 80
Iscritto il: 2 gen 2014, 17:31

1
voti

[2] Re: Errore linker

Messaggioda Foto UtentePaolino » 11 feb 2014, 5:08

Non ho sottomano il mio PC per poter fare una prova, ma ti consiglio di indicare nel codice e nel progetto il medesimo device. In un caso hai impostato il PIC16F84A (progetto), nell'altro il PIC16F84 (codice sorgente).

Ciao.

Paolo
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: Errore linker

Messaggioda Foto Utenterudj » 11 feb 2014, 13:59

grazie per avermelo fatto notare, comunque ho provato ma l'errore rimane, ho risolto però sostituendo questo pezzo di codice:

Codice: Seleziona tutto
ORG 0CH
Count RES 2
nTick RES 1


con questa:
Codice: Seleziona tutto
CBLOCK 0x0C
Count:2
nTick
ENDC


ora funziona, ma vorrei capire... non posso più dichiarare variabili senza la direttiva CBLOCK?
Avatar utente
Foto Utenterudj
25 5
New entry
New entry
 
Messaggi: 80
Iscritto il: 2 gen 2014, 17:31


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti