Newsgroup: it.comp.lang.c
Titolo: Come identificare i limiti di un blocco di memoria in C standard

Salve a tutti.
Ho un piccolo problema a cui non riesco a trovare una soluzione.
In un programma C devo definire un blocco di variabili che devono essere
trasferite da una funzione, dalla ram ad una memoria non volatile seriale.
In assebler utilizzavo gli .equ per definire l'indirizzo di start e di end
del blocco variabili da trasferire.
Ad esempio:
(zona RAM)
START_MEM_EEP    .equ    $
variabile 1
variabile 2
variabile 3
END_MEM_EEP        .equ    $
e con la funzione:
    mov.l        #END_MEM_EEP,ER0
;Indirizzo di fine blocco memoria da trasferire
    mov.l        #END_MEM_EEP-START_MEM_EEP,ER1    ;Lunghezza del blocco da
trasferire in byte
    <ciclo loop di trasferimento per ER1 byte da END_MEM_EEP a
START_MEM_EEP>
trasferivo il blocco nella memoria non volatile.
Adesso devo tradurre il tutto in C.
Fino ad adesso ho utilizzato una struct in cui inserivo le variabili da
salvare, poi calcolavo la lunghezza della struct con sizeof() e la
trasferivo byte a byte nella memoria non volatile.
Il primo problema e' che ogni variabile deve essere richiamata con la
notazione nome_struttura.variabile (che non e' il male peggiore).
Il secondo problema e' l'overhead di codice che viene generato ad ogni
chiamata della variabile per puntare all'interno della struttura.
Il terzo e piu' grave (per me :-) ) e' come fare a chiamare le variabili
inserite nella struct dal codice assembler. Devo ogni volta calcolare lo
spiazzamento all'interno della struct?
Non e' possibile da C standard definire un indirizzo alla maniera del .equ ?
Se utilizzo due variabili dummy tipo:
char dummy1
int variabile_1
int variabile_n
char dummy2
e poi faccio lunghezza_blocco=&dummy2-&dummy1 faccio una ca@@ata?
Esiste un altro metodo per risolvere il problema?
Scusate se l'esposizione e' un po' contorta, ma spero si riesca a capire.
Grazie
Giuseppe
-- 
--
Ciao
Giuseppe

 ha scritto nel messaggio
news:c3fb3r$272vcc$1...@ID-61213.news.uni-berlin.de...


 
Quale e' il problema? Intendo dire.. cosa non funziona?
In ogni caso, se la tua struct contiene tutti i suoi componenti,
cioe', le variabili contenute non sono dei puntatori, allora
te la puoi cavare benissimo con il sizeof.
Tieni presente comunque, l'allineamento delle strutture..
E' buona cosa istruire il compilatore/linker ad allineare
la struttura e a pacchettare il tutto.. cioe' a non lasciare
byte vuoti fra una variabile e l'altra per motivi di allineamento.
-- 
                Roberto Nunnari -software engineer-
                     mailto:
ro...@nunnisoft.ch
   Residenza Boschetto 12           tel/fax: 
+41-91-6046511
   6935 Bosco Luganese        """    mobile: 
+41-76-3208561
   Switzerland               (o o)
========================oOO==(_)==OOo========================

 e poi faccio lunghezza_blocco=&dummy2-&dummy1 faccio una ca@@ata?
Si` :)
Luca
-- 
Home: 
http://kronoz.cjb.net
Ligabue canta: "Tutti vogliono viaggiare in primaaaa..."
Io ci ho provato e dopo un chilometro ho fuso il motore e bruciato
la frizione...


Il problema (se non sbaglio qualcosa :-) ) e' che nel modulo assembler,
l'assemblatore, non mi lascia importare una variabile di una struttura con
la notazione
.import    _struttura.variabile
quindi dovrei passare l'indirizzo della struttura e poi calcolarmi a manina
l'offset della variabile.
Tutto questo succede con i tool C/Assembler/Linker della Hitachi per i suoi
micro.
Poi utilizzando la struct il compilatore mi genera un codice un po'
incasinato,
 non so se e' perche' e' poco ottimizzato.
Devo quindi trovare un'alternativa all'utilizzo della struct.
Ciao
Giuseppe