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
Messaggio di errore dopo il build del mio firmware
Moderatore:
Paolino
12 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
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ì:
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
0
voti
...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??
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??
0
voti
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
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
0
voti
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.
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
0
voti
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
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

12 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 8 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


