Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Messaggio di errore dopo il build del mio firmware

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentemros » 11 ott 2013, 10:19

Buongiorno

conoscete per caso questo errore ?:

Error - section '.org_2' can not fit the absolute section. Section '.org_2' start=0x00000004, length=0x00000182
Errors : 1

riguarda sicuramente la parte dell'interrupt:

ORG 04H
btfsc INTCON,T0IF
goto IntT0IF
btfsc INTCON,RBIF
goto IntRBIF
End_ih
bcf INTCON,T0IF
bcf INTCON,RBIF

retfie
IntT0IF
goto End_ih
IntRBIF
goto End_ih

dove sbaglio?

grazie
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[2] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentec1b8 » 11 ott 2013, 10:34

quale PIC stai utilizzando?
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[3] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentemros » 11 ott 2013, 14:09

PIC16F877
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[4] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentemros » 11 ott 2013, 16:08

....ho la sensazione che MPLAB non abbia considerato l'istruzione "retfie" e che tutto il firmware sia stato scritto dalla locazione 04H.
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[5] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentec1b8 » 11 ott 2013, 16:24

Non so se MPLab sia in grado di discriminare il contenuto del segmento di memoria.
L'indirizzo 04h è probabilmente definito di lunghezza 1 nel linker file e quindi ti segnala errore.
Dovresti provare a scrivere così:
Codice: Seleziona tutto
   ORG 04H
   btfsc INTCON,T0IF
   ORG 05H
   goto IntT0IF
   btfsc INTCON,RBIF
   goto IntRBIF
End_ih
   bcf INTCON,T0IF
   bcf INTCON,RBIF

   retfie
IntT0IF
   goto End_ih
IntRBIF
   goto End_ih
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[6] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentemros » 11 ott 2013, 16:33

...mi da sempre lo stesso errore.

ho fatto una prova (assurda) ma ha funzionato....
dopo aver riservato memoria per le variabili :

ORG 0x20
cont res3
d1 res10

poi al posto di partire dall'indirizzo 0x04 (Interrupt handler) ho scritto:

ORG 0X33
.....
....

ha funzionato...e come se l'assemblatore mi comunicasse che ho sovrascritto una porzione di memoria in precedenza allocata....ma tutto ciò mi sembra assurdo...se cosi fosse perché in passato, quando non ho utilizzato gli interrupt, non mi ha mai dato nessun messaggio di errore ?? anche con firmware molto più lunghi??
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[7] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentemros » 11 ott 2013, 18:31

......aiutatemi a capire sta cosa.
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[8] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentemros » 11 ott 2013, 20:05

Ho sostituito RES con Cblock.......adesso funziona

sono ancora più confuso di prima (almeno pare che il problema sia risolto).

Fatemi capire !!!! L'istruzione RES riserva spazio in memoria a partire dall'indirizzo associato al ORG.
Mentre con Cblock assegno un indirizzo ad una variabile a partire dal valore che segue Cblock (0x20 nel mio caso).

cosa cambia?
e perché nel secondo caso funziona??

grazie
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[9] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentec1b8 » 11 ott 2013, 22:49

La differenza tra ORG e CBLOCK è il tipo di memoria a cui si riferiscono.
ORG serve a definire il punto di origine nella memoria programma (flash).
CBLOCK serve a definire un blocco di "constanti". Viene utilizzata per definire gli indirizzi di memoria delle variabili, ma per il compilatore sono di fatto delle costanti.
Se utilizzi la ORG per definire le variabili a partire da un certo indirizzo (che tu intendi ram ma il compilatore interpreta essere in flash) ed il programma arriva ad occupare le stesse locazioni ti segnala una "sovrapposizione" o ridefinizione delle stesse locazioni.
Mediante la cblock si riesce, al contrario, a differenziare gli indirizzi cosrtanti delle variabili dagli indirizzi di programma. Attento però: con la cblock definisci constanti, questo significa che la puoi utilizzare solo su programmi non riallocabili e una analisi della ram utilizzata non considera le variabili definite con la cblock.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[10] Re: Messaggio di errore dopo il build del mio firmware

Messaggioda Foto Utentemros » 12 ott 2013, 7:38

Ciao Fabio
Approfitto di questo messaggio per chiarirmi le idee.
finora ho sempre scritto firmware molto semplici dove la dichiarazioni di variabili la effettuavo mediante il comando Res dopo Org 0x20 ( nel mio caso PIC 16f877) pertanto, se ho capito bene, le stesse non venivano associate nella memoria RAM ma bensì nella parte della program memory ovvero dove viene scritto il firmware.
A questo punto, ammesso che non abbia capito fischi per fiaschi, perché il problema non si presentava anche prima ?

Credimi sono tanto confuso...sto leggendo a destra e a manca per capire come mplab alloca la memoria ma ci sono tante versioni diverse che mi stanno mandando in confusione.

Perché prima, partendo da Org 0x00 con programmi abbastanza lunghi non ho mai avuto di questi problemi con tante variabili dichiarate con res.....e ora che ho utilizzato per la prima volta l'interrupt mi ha fatto sto casino....ma quando il datasheet parla di locazione dedicata alle variabili da ... A .... Che intende ?

A presto
Rosario O_/
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti