Newsgroup: it.hobby.elettronica.digitale
Titolo: questo ADUC mi fa impazzire,xdata pointer

ciao ,chi mi aiuta per favore?
invece di avere il vaore di una variabile in XDATA mi ritrovo l'LSB del suo
indirizzo:
ho realizzato una piccola board con un ADUC842,uso un compilatore freeware
ma limitato nelle dimensioni del codice(Keil),uso il modello SMALL
unsigned char xdata  ucxprova;    // dichiaro una variabile in XDATA,un
unsigned char:
                                                  // il compilatore la
alloca nel primo spazio libero in XDATA es all 'indirizzo 0x0020
ucxprova=0xF3;     //nel codice le assegno un valore
sendbyte(ucxprova);// la passo come parametro ad una funzione con prototipo
void sendbyte(unsigned char);
/*     ecco, avviene che in simulazione la funzione lavora col paramentro
che vale 0xF3,ma nella realtà rilevo che alla funzione viene passato
       0x20,cioè    l'indirizzo della variabile ucxprova
,perchè?????????
      se utilizzo un puntatore a unsigned char xdata  e ne riverso il
contenuto ad una variabile in DATA non cambia niente  */
unsigned char xdata * ucxptr;//puntatore a unsigned char in XDATA
unsigned char ucprova;//variabile   unsigned char in DATA
ucxptr=&ucxprova;
ucprova=*ucxptr;
sendbyte(ucprova);
grazie per la pazienza

 indirizzo:
cos'è XDATA?
una struttura?
-ice- 

 ha scritto nel messaggio
news:9ZBEl.300093$FR.6...@twister1.libero.it...

grazie dell 'attenzione
no,essendo un core 8051 XDATA è un area di memoria RAM sempre  interna al
micro,ma che  fa le veci di quella che una volta,per limiti tecnologici,era
la memoria esterna
e' più ampia di DATA,che era la memoria interna,ma un pochino più lenta

 e' più ampia di DATA,che era la memoria interna,ma un pochino più lenta
da come descrivi sembrerebbe proprio un problema di puntatori;
purtroppo non so aiutarti più di tanto perchè non conosco questi uC, ho solo 
qualche info di base
-ice- 

 ha scritto nel messaggio
news:21JEl.300196$FR.6...@twister1.libero.it...

grazie ,triple m
ho provato a settare il bit 0 del registro CFG842  XRAMEN,ma niente da fare
.....era questo che intendevi?

blisca ha scritto:

non conosco i dettagli dell ADUC, ma intendevo proprio qualcosa del 
genere, vedi se ci sono altri settaggi piu' oscuri tipo la dimensione 
della memoria XDATA effettivamente abilitata o a quale indirizzo 
effettivo viene mappata.
hai per caso abilitato lo stack esteso ?
prova ad allocare le tua variabili XDATA ad un indirizzo >= 0x100 ( nota 
bene: mi sono scaricato il datasheet :-) )

 ha scritto nel messaggio
news:qPLEl.210239$Ca.3...@twister2.libero.it...

si l'ho letto anch'io,ma devo ancora capire bene questa parte,comunque
comincia funzionare
ho allocato la variabile a 0x100 senza inizializzarla,cosa che ho fatto
all'inizio del main   perň dopo di avere abilitato xdata con CFG842 |=0x1;
grazie mmm

 sendbyte(ucprova);
Che e' sto schifo prima usate proci da buttare pic e robe varie  poi venite 
qui a rompere, andate a zappare insieme ai terroni. 

qui a rompere, andate a zappare insieme ai terroni. 
Questo messaggio non è stato scritto dal vero Bertolazzi, che notoriamente
risiede a Genova, ma come si può ricavare dall'IP  62.98.83.43  da un utente che
sta a Napoli, come parecchi (o è uno solo?) dei suoi "estimatori".
Tra l'altro il vero Bertolazzi mi ha scritto in mail la sua volontà di astenersi
per un pò dai ng.
Per favore piantiamola con queste bambinate.
--
ciao
  Stefano

 ha scritto nel messaggio
news:u7s8u4l4vl8ubchfs...@4ax.com...

e va beh...gente che non si è rilassata a Pasqua

 Per favore piantiamola con queste bambinate.
mi sembrava che mancasse la punteggiatura.
coals

 ha scritto nel messaggio
news:49e4c851$0$836$4faf...@reader5.news.tin.it...

in effetti il Bertolazzi ,anche quando non brillava per simpatia,non
disonorava la lingua italiana,lingua che si perderebbe in una generazione se
avesse per depositari certi elementi
augh ,ho detto
buona serata

 Questo messaggio non č stato scritto dal vero Bertolazzi
Giusto. Perň č ben imitato direi...
-- 
Another bucket for my friend..*BARF!*...and perhaps a hose... 
News 2002 [v 2.4] - [ StopDialers/PopDuster/SMTP Proxy - 
http://www.socket2000.com
 ]

 sta a Napoli, come parecchi (o è uno solo?) dei suoi "estimatori".
Quale e' il problema? ho parenti in Terronia non posso andarli a  trovare?

F. Bertolazzi ha scritto:

certo, Bertolazzi: ma allora Salvy e' tuo parente ?
e' gentile a lasciarti usare il suo PC.
saluti
-- 
  lowcost

 ha scritto nel messaggio
<snip>
ti rispondo qui, in italiano, alla tua domanda su c.a.e, altrimenti mi 
"sparano" :
l'8051 ( e molti suoi derivati ) hanno la possibilita' di usare due 
porte ad 8 bit e 4 segnali aggiuntivi come un bus esterno ( parallelo ) 
per interfacciarsi a memorie e periferiche.
la prima porta e' usata per il bus indirizzi da A8 ad A15, la seconda 
porta e' multiplexata tra il bus dati ed la parte bassa degli indirizzi 
( A0 - A7 ) su questa porta viene emesso PRIMA l'indirizzo e POI viene 
emesso o letto il dato ( a seconda di un ciclo di scrittura o lettura )
in piu' ci sono :
ALE    .... AddressLatchEnable
PSEN   .... lettura dallo spazio d'indirizzamento programma (*)
RD     .... lettura dallo spazio d'indirizzamento dati (**)
WR     .... scrittura nell spazio dati
(*) molti 8051 possono eseguire programma da memoria ESTERNA, una sorta 
di modalita' microprocessore anziche' controller ed esistono anche 
varianti romless da usarsi esclusivamente come microprocessore
(**) il cosidetto spazio XDATA
allo spazio xdata si accede solo in modalita' indiretta tramite un 
registro puntatore e solo per leggere o scrivere tramite l'accumulatore
( sono le istruzione movx in assembler )
cosa succede se si esegue un ciclo di lettura e nessuna periferica ( 
memoria o dispositivo di I/O o reti di pull-up ) pilota il bus ?
la capacita' del bus dati e' sufficiente a ricordare l'ultimo valore che 
vi e' transitato e che e' proprio la parte bassa dell'indirizzo, per cui 
si ha l'effetto che leggendo la locazione per esempio 0x1234 hai in 
risposta 0x34 invece del valore atteso.

 ha scritto nel messaggio
news:240Gl.302226$FR.6...@twister1.libero.it...

Grazie mmm
oh perbacco,ciò spiegherebbe il problema,e potrebbe risparmiarmi molto tempo
se dovessi un giorno implementare una gestione memoria esterna,però in
questo caso dove la memoria è comunque interna  quale dovrebbe essere la
corretta sequenza?Per adesso mi pare che la cosa che mi abbia risolto il
problema sia stata indicare esplicitamente l'indirizzo fisico della
variabile o array con "_at_",ciò ha qualche attinenza?Anche prima,quando
guardavo il codice assembly della lettura da xdata mi pareva che usasse
proprio come ora l'istruzione MOVX
ciao

 ha scritto nel messaggio
news:240Gl.302226$FR.6...@twister1.libero.it...

però non capisco,uno volta che abilito XRAMEN,dichiaro che voglio lavorare
sulla xram interna,quindi è come se un dispositivo di memoria ci
fosse,perchè non mi ritrovo il dato?
grazie ancora

 proprio come ora l'istruzione MOVX
con l' _at_ fissi tu l'indirizzo di una variabile, probabilmente fuori 
da qualche zona influenzata da altro, per caso hai usato anche variabili 
PDATA ( o le PDATA sono solo del'sdcc ???? )  ?
la gestione con gli _at_ E' IMHO una PORCHERIA :-) a forte rischio di 
errore da usarsi come estrema ratio.
mi sono fatto un giro sul compilatore keil e direi che i parametri da 
provare sono i seguenti ( nella configurazione del progetto )
1) configurazione senza stack esteso :
Use On-chip XRAM attivo , il compilatore dovrebbe provvedere ad 
abilitarla in automatico , nient'altro da fare
1a) configurazione senza stack esteso :
Use On-chip XRAM spento , specifichi a manina la Off-chip XRAM
la abiliti a manina da codice :-) poi lavori
2)  configurazione con stack esteso ( non so se come il keil si comporta ):
come la 1a stando attento a specificare 0x100 - 07ff come range di 
memoria, abiliti la XRAM e lo stack esteso a manina
eventualmente verifica il codice assembler generato