Newsgroup: it.hobby.elettronica.digitale
Titolo: C & Array di puntatori

Salve a tutti, e' dalla settimana scorsa che non riesco ad andare
fuori da questo problema: vorrei creare un array di puntatori a
stringhe(array di char) x facilitarmi nella gestione dei menu' di un
lcd pilotato da un pic.Ho letto diverse cose x creare un array in c,
alla fine ci sono riuscito come nell' es. qui sotto (non vogliatemente
x eventuali errori):
void main(){
char p1[]="Hotel";
char p2[]="Otranto";
char p3[]="Torino";
char *text[]={p1,p2,p3};
}
Queste 4 righe di codice mi creano un arrray di puntatori ad array di
char in memoria a runtime: e' possibile realizzare una cosa del genere
in modo che il compilatore(uso ccs) capisca di definirmi le
stringhe(costanti) in rom?
leggendomi l'help del compilatore ho letto che esiste la direttiva
#ORG per la quale e' definita la seguente sintassi
#org start, end
   or
#org segment
   or
#org start, end {}
   or
#org start, end   auto=0
#ORG start,end DEFAULT
   or
#ORG DEFAULT
il punto e' che se le 4 righe scritte sopra(stavolta gli specifico che
sono costanti) provo ad includerle in un blocco (che sta sopra main)
#ORG 0x1c00,0x1d00 {
const char p2[]="Otranto";
const char p3[]="Torino";
const char *text[]={p1,p2,p3}; }
 il compilatore ri rifiuta di fare il suo dovere mostrandomi i
seguenti errori:
*** Error 27 ... Line 32(23,24): Expression must evaluate to a
constant
*** Error 48 ... Line 32(24,26): Expecting a (
*** Error 48 ... Line 32(27,29): Expecting a (
*** Error 43 ... Line 32(30,31): Expecting a declaration
*** Error 48 ... Line 32(31,32): Expecting a declaration
(dove la riga 32 e' l'ultima)
Sapreste dirmi in che modo uscire dal problema?
Grazie,
Enrico

 ha scritto nel messaggio
news:1171496362.5...@h3g2000cwc.googlegroups.com...


 > (dove la riga 32 e' l'ultima)
Io uso un altro compilatore C con un altro micro e per mettere delle
variabili in ROM è sufficiente dichiarare le variabile const (niente
direttiva #ORG).
Quindi:
const char p1[]="Hotel";
const char p2[]="Otranto";
const char p3[]="Torino";
const char * const text[]={p1,p2,p3};
Marco

 const char * const text[]={p1,p2,p3};
Grazie x la risposta, ma tu riesci a definire in rom array di
puntatori (come vorrei fare io con le stringhe)?

 ha scritto


Si. Ad esempio mi capita spesso di avere tabelle di dati costanti (sono
delle struct) a cui accedo tramite puntatori che sono memorizzati in un
arrary di puntatori a queste struct. Il tutto (struct e array di puntatore
alle struct) viene allocato in ROM.

 ha scritto

non e' che riesci a postarmi un pezzettino di codice(solo x esempio)
dal quale posso prendere spunto?

 dal quale posso prendere spunto?
Tutte le variabili che vedi sono tutte allocate in ROM.
/* informazioni descrittive stringa */
typedef struct
{
    const unsigned char  len_string;       /* lunghezza stringa      */
    const          char *string;           /* puntatore alla stringa */
} STRING_INFO;
/* informazioni descrittive lingua */
typedef struct
{
    const unsigned int   num_stringhe;     /* numero stringhe
della lingua */
    const STRING_INFO   *strings;          /* puntatore alle info stringhe
della lingua */
} LANGUAGE_INFO;
/* stringhe in italiano */
static const char String_TastoFunzione_Stato    [] = "Stato";
static const char String_TastoFunzione_Rubrica  [] = "Rubrica";
static const char String_TastoFunzione_Preferiti[] = "Preferiti";
static const char String_TastoFunzione_Richiama [] = "Richiama";
// ...
/* info stringhe in italiano */
static const STRING_INFO String_StringheItaliano[] =
{
    {(sizeof(String_TastoFunzione_Stato    ) - 1),
String_TastoFunzione_Stato    },
    {(sizeof(String_TastoFunzione_Rubrica  ) - 1),
String_TastoFunzione_Rubrica  },
    {(sizeof(String_TastoFunzione_Preferiti) - 1),
String_TastoFunzione_Preferiti},
    {(sizeof(String_TastoFunzione_Richiama ) - 1),
String_TastoFunzione_Richiama },
    // ...
};
/* info lingua italiano */
const LANGUAGE_INFO String_LanguageItaliano =
{
    STRINGA_NUM_STRINGHE,        /* numero stringhe         della lingua */
    String_StringheItaliano      /* puntatore alle stringhe della lingua */
};
/* lingue definite */
static const LANGUAGE_INFO * const String_LanguageVector[] =
{
    &String_LanguageItaliano,
    &String_LanguageInglese,
    &String_LanguageSloveno,
    &String_LanguageCroato,
    &String_LanguageCeco,
    &String_LanguageSpagnolo,
    &String_LanguageRumeno,
    &String_LanguageTedesco
};