Newsgroup: it.hobby.elettronica.digitale
Titolo: MPLAB: MPLINK funziona?

Salve a tutti,
sto iniziando un progetto abbastanza in grande per un PIC16F84.
Credo di sfruttare appieno tutta la memoria programma e vorrei creare
un sorgente modulare e rilocabile. Quindi vorrei sfruttare tutte le
potenzialità di MPLAB (file oggetti, librerie, allocazione variabili, ecc.)
per semplificarmi il compito di organizzarmi la memoria e le istruzioni.
La mia domanda è: MPLINK funziona veramente? Nel senso che, avendo due
sorgenti che utilizzano un registro ognuno e che si richiamano tra loro,
MPLINK riesce automaticamente a verificare se i due registri possono
sovapporsi oppure no?
Immaginiamo main.asm e fun.asm. In fun.asm ho una subroutine che utilizza,
internamente, un solo registro temporaneo. Lo dichiaro, ovviamente, con
una direttiva tipo UDATA.
La subroutine di fun.asm viene richiamata da main.asm che, a sua volta,
utilizza un registro temporaneo.
---
;main.asm
        UDATA
Temp    RES    1          ; variabile temporanea
        EXTERN    sub     ; subroutine in fun.asm
        CODE
        ...
        CALL    sub       ; subroutine in fun.asm
        ...
        END
---
; fun.asm
        UDATA
Temp    RES    1        ; variabile temporanea
        CODE
sub
        GLOBAL    sub
        ...
        RETURN
        END
---
Bene, in funzione dell'algoritmo in main.asm, il registro Temp di main può
sovrapporsi o meno
al registro temporaneo Temp in fun.asm. In questo caso MPLINK non riesce a
capire se può
utilizzare lo stesso registro per le due variabili Temp e quindi alloca due
registri diversi,
con ovvio spreco di memoria. La conclusione è che è meglio programmare il
sorgente senza
l'ausilio della rilocabilità e fare a manina il progetto della memoria e
della sua utilizzazione cercando di condividere il numero maggiore di
registri.
Voi cosa ne dite?

 wrote in message
news:AOav8.47243$SR5.1...@twister1.libero.it...


 Cosa vuol dire ?
Semplice, sovrapporsi intendo dire usare lo *stesso* registro fisico.
In pratica, se nel main mi serve Temp solo *prima* di richiamare la fun,
allora il registro Temp (all'interno di fun) può tranquillamente coincidere
con il registro Temp (all'interno del main). Con ovvio risparmio di risorse!

 wrote in message
news:uvdv8.50311$m41.1...@twister2.libero.it...


 allo stesso indirizzo perche' "temporalmente" non coesistono.
Mi sono spiegato male, o meglio, l'esempio che ho fatto era infelice.
Le due variabili del mio esempio potevano avere qualsiasi nome, ovviamente,
anche diverso. M'č venuto uguale ma non era quello il problema.
Quello che chiedevo č: MPLINK riesce a sapere quando due variabili
(indipendentemente dal nome) non collideranno mai e quindi riesce ad
ottimizzare le risorse assegnando alle due variabili lo stesso registro?


tieni presente che, se non sbaglio, c'e' l'indirizzamente indiretto che
manda a "pallino" qualunque "logica di allocazione".
Ciao, Alessandro.

 manda a "pallino" qualunque "logica di allocazione".
Quindi non lo fa. E l'allocazione ottima la devo trovare io...
Ma come si fa? E' un vero casino se hai un programma molto lungo e
complesso.
Capire come gestire la RAM tra le varie variabili non č per niente semplice.