mros ha scritto: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.
No, attenzione che le variabili sono sempre nella RAM.
Quando scrivi
- Codice: Seleziona tutto
org 0x20
variabile1 res 1
variabile2 res 1
oppure
- Codice: Seleziona tutto
cbloock 0x20
variabile1:1
variabile2:1
endc
fai esattamente la stessa cosa, ovvero definisci delle label (variabile1 e variabile2) alle quali assegni un valore costate (variabile1=0x20, variabile2=0x21). La stessa cosa si sarebbe potuta scrivere
- Codice: Seleziona tutto
#define variabile1 0x20
#define variabile2 0x21
ma come vedi in modo meno pratico (devo definire il valore a tutte le label e non solo alla prima).
Dicevamo quandi: vengono definite delle label ed assegnate a queste dei valori costanti, non si parla ancora di RAM, FLASH, EEPROM o altro.
Poi posso utilizzare quelle label in istruzioni diverse del programma e, solo in quel momento, possono assumere significati diversi.
Se scrivo
- Codice: Seleziona tutto
movlw variabile1
allora utilizza la label variabile1 come costante ed carico nel registro W il suo valore ovvero 0x020. In qualsiasi modo abbia dichiarato la label1.
Se scrivo
- Codice: Seleziona tutto
movf variabile1, 0
Allora utilizzo la label variabile come indirizzo di variabile (la variabile locata all'indirizzo 0x20) della RAM perché le variabili possono essere solo in RAM. Anche in questo caso qualsiasi sia il metodo utilizzato per dichiarare quella label.
mros ha scritto: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 ?
Questo è per me un domandone, no so risponderti con precisione, posso fare delle ipotesi basate sulla mia esperianza.
Anzitutto vorrei che ti fosse chiaro perché non è formalmente corretto utilizzare la org per dichiarare variabili.
Come detto prima per dichiarare una label da usare come variabile avrei molti modi possibili, tutti sintatticamente corretti. Per cercare di mettere ordine e per cercare di segnalare eventuali errori logici nei programmi come può essere ad esempio l'impiego di troppa ram o pezzi di programma che si sovrappongono in memoria o altro, chi ha scritto mplab ha deciso, da una certa versione in poi, di eseguire controlli che prima non venivano eseguiti. Per fare questo hanno dato maggior significato alla org, trattandola come indicazioni di posizione assoluta per il codice (veniva fatto anche prima ma in maniera molto più blanda). Quando scrivi org 0x20 quindi il compilatore ha la presunzione di sapere che tu stia definendo un pezzo di codice programma che inizia da 0x20. Che poi il tuo codice programma siano in realtà delle res, ovvero solo un riservare memoria, questo a lui non interessa: dovrebbe altrimenti entrare nel merito del programma, capirlo e questo non sono ancora in grado di farlo.
Se poi nel tuo codice definisci una ulteriore org, con indirizzo precedente alla org 0x20 ed il codice che scrivi si va a sovrapporre alla locazione 0x20 ecco che ti viene segnalato.
Io non credo che il compilatore ti dia errore perché utilizzi gli interrupt, ma probabilmente ti da errore anche se scrivi org 0x10 dopo aver dichiarato le variabili con una org 0x20.
perché con la org 0 no? Non lo so. perché org 0 ha un significato particolare, perché c'è un bug nel controllo o, forse più probabile, perché quanto da me detto non è corretto? Sinceramente non lo so. sicuro è che definire una variabile con la org non è più corretto.
Ultima cosa, come ho accennato prima questo controllo è stato inserito in mplab a partire da una certa release, anche piuttosto recente se non ricordo male, prma non c'era. Non è che i programmi che prima non ti davano errore erano compilati con una diversa release? (lo so mi sto

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)


