Memoria dati e memoria programma PIC16F84A

12 Anni 2 Settimane fa - 12 Anni 2 Settimane fa #1 da mikysmcv
Memoria dati e memoria programma PIC16F84A è stato creato da mikysmcv
Salve a tutti, riguardando un programma d'esempio riportato su un libro che sto studiando, mi è venuto un dubbio e spero che qualcuno possa chiarirmi un pò le idee :)

Allora per il microcontrollore in questione la memoria programma è composta da 1024 locuzioni di 14 bit ciascuno indirizzate da 0000h ad 3FFh, mentre la memoria dati è suddivisa in due banchi Bank0-Bank1 ciascuno a sua volta suddiviso nelle aree SFR e GPR dove l'area SFR ovvero le prime 12 locuzioni di ogni banco serve per monitorare e controllare le periferiche, mentre l'area GPR è costituita da 68 locuzioni nel banco0 e altre 68 nel banco1, dove quelle del banco0 iniziano da 0Ch e quelle del banco1 iniziano da 8Ch.

Detto ciò i miei dubbi riguardano la direttiva ORG in quanto nel programma è inserita una prima ORG del tipo:

ORG 0Ch

per la quale il libro dice che questa serve per definire un'area dati in cui memorizzare variabili e contatori durante l'esecuzione del programma, e fin qui ci sono, poi inserisce un'altra ORG del tipo:

ORG 00h

per la quale dice che questa fa riferimento ad un indirizzo di area programma anzichè in area dati.
Il mio dubbio a questo punto è il seguente, visto che sia l'area dati che l'area programma iniziano dall'indirizzo 00h, perchè si ha la certezza che scrivendo quella ORG si fà riferimento all'area programma e non a quella dati ?
E' vero che la prima locuzione di memoria, all'indirizzo zero, deve contenere la prima istruzione che il microcontrollore esegue al reset e per questo viene chiamata Reset Vector, però io non risco a capire come il microcontrollore non si confonda tra area dati e programma se queste hanno gli stessi indirizzi.

Grazie per le eventuali risposte :)
Ultima Modifica 12 Anni 2 Settimane fa da mikysmcv.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mikysmcv
  • Avatar di mikysmcv
  • Premium Member
  • Premium Member
Di più
12 Anni 2 Settimane fa - 12 Anni 2 Settimane fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Memoria dati e memoria programma PIC16F84A
Ciao,

la direttiva assembly ORG dice semplicemente dove posizionare il codice che segue o una variabile.
In particolare assegni un indirizzo di partenza.

Per le variabili in RAM c'e' un'altra direttiva che ora non ricordo (mi sembra EQU) [Errato e' RES]
In ogni modo nessuno ti vieta di scrivere delle costanti in flash che considerai come memoria dati.

quando scrivi ORG 00h
e scrivi dieci NOP

poi scrivi ORG 05h, e scrivi altro codice...
...hai sovrapposizione del programma.
Se memoria non mi inganna ti viene segnalato come errore in fase di compilazione.

E' da quasi 10 anni che non programmo un PIC16 in assembly! :)

Saluti,

Mauro
Ultima Modifica 12 Anni 2 Settimane fa da Mauro Laurenti.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
12 Anni 2 Settimane fa #3 da mikysmcv
Risposta da mikysmcv al topic Re: Memoria dati e memoria programma PIC16F84A
Grazie Mauro per la risposta, ho riletto un pò il capitolo che riportava l'esempio e le varie definizioni delle direttive, allora il libro dice che la ORG può essere usata sia per far riferimento all'area dati che all'area programma ed invece la direttiva EQU serve per definire delle costanti, detto ciò il programma che stavo analizzando dopo varie direttive iniziali inserisce le seguenti tre:

ORG 0CH
Count RES 2
ORG 00H

dicendo che la prima definisce un'area dati all'interno del PICmicro ovvero un'area in cui memorizzare variabili e contatori durante l'esecuzione del programma, la seconda indica al compilatore di riservare un certo numero di byte, mentre la terza fa riferimento ad un indirizzo in area programma anzichè in area dati.

Ora da quello che ho capito ( o credo di aver capito :) ) la prima ORG fà riferimento all'area dati perchè l'area GPR della memoria dati inizia proprio dall'indirizzo 0CH, mentre la seconda ORG fà riferimento alla memoria programma in quanto la prima locuzione di memoria, all'indirizzo zero, deve contenere la prima istruzione che il PICmicro deve eseguire al reset e non può essere un'indirizzo dell'area dati in quanto l'indirizzo 00H dell'area dati fà riferimento alla SFR ovvero all'area riservata alle funzioni speciali per il funzionamento del PICmicro e non possono essere utilizzate per altri scopi.

Quante cavolate ho detto :unsure: ?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mikysmcv
  • Avatar di mikysmcv
  • Premium Member
  • Premium Member
Di più
12 Anni 2 Settimane fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Memoria dati e memoria programma PIC16F84A
Bisogna fare attenzione la memoria flash ha anche l'indirizzo 0CH che e' quello che tu hai detto essere della RAM.
Quindi sembrerebbe esserci una sovrapposizione.
Il tutto funziona perche' la memoria Flash e RAM hanno un bus indirizzi diversi (Architettura Harvard ).

Se memoria non mi inganna tutto quello che scrivi prima di ORG 00H rappresentano indirizzi EEPROM e RAM.

In ogni modo ORG non definisce un area bensi dice solo al linker dove posizionare le variabili o istruzioni che ha generato il compilatore.

Saluti,

Mauro
Ringraziano per il messaggio: mikysmcv

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
12 Anni 2 Settimane fa #5 da mikysmcv
Risposta da mikysmcv al topic Re: Memoria dati e memoria programma PIC16F84A

Mauro Laurenti ha scritto: Bisogna fare attenzione la memoria flash ha anche l'indirizzo 0CH che e' quello che tu hai detto essere della RAM.
Quindi sembrerebbe esserci una sovrapposizione.
Il tutto funziona perche' la memoria Flash e RAM hanno un bus indirizzi diversi (Architettura Harvard ).


Adesso le cose mi sono un pò più chiare, infatti non riuscivo a capire come mai non ci fossero problemi una volta caricato il programma, il quale sicuramente superava l'indirizzo 0CH e quindi si sarebbe andato ad accavallare allo spazio riservato nell'area dati, GRAZIE :)

Mauro Laurenti ha scritto: In ogni modo ORG non definisce un area bensi dice solo al linker dove posizionare le variabili o istruzioni che ha generato il compilatore.


Questo il libro non lo riportava e quindi non lo sapevo :) GRAZIE anche per questo.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mikysmcv
  • Avatar di mikysmcv
  • Premium Member
  • Premium Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login