comment acceder directement à un tableau de tableau de const byte dans une structure ?
Bonjour,
je voudrais définir un menu de plusieurs ligne sur un afficheur LCD 4 lignes de 20 caractères et j'ai un problème pour y accéder via une fonction.
je précise que je programme en 'C' mais pour microcontrôleur 32 bit. (pas pour windows donc)
j'utilise aussi une redefinition de type pour unsigned char en BYTE.
voici mon code, se sera plus simple qu'une foule d’explication.
le menu pouvant être écrit en plusieurs langues, je déclare les texte dans un fichier texte.c et texte.h pour permettre leur utilisation dans d'autre fichier.
j'utilise le const car elle doivent être placée en ROM et non en RAM pour un gain de place en RAM.
texte.c
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
const BYTE *tbl_TXT_ligne_1 [] = {
"ligne_1_FR", //FR
"ligne_1_NL", //NL
"ligne_1_UK", //UK
"ligne_1_DE" //DE
};
const BYTE *tbl_TXT_ligne_2 [] = {
"ligne_2_FR", //FR
"ligne_2_NL", //NL
"ligne_2_UK", //UK
"ligne_2_DE" //DE
}; |
et bien sur le texte.h
Code:
1 2 3
|
extern const BYTE *tbl_TXT_ligne_1 [];
extern const BYTE *tbl_TXT_ligne_2 []; |
menu.h pour la declaration du menu (qui peut contenir plusieurs lignes 3, 4 u 7 par exemple)
Code:
1 2 3 4 5
|
typedef struct struct_menu {
BYTE nbr_ligne;
const BYTE** tbl_ligne[10];
}DEF_MENU,*PDEF_MENU; |
menu.c qui initialise une variable de type menu et qui contient la fonction l'utilisant.
Code:
1 2 3 4 5 6 7
|
DEF_MENU MENU_principale = {
.nbr_ligne = 2,
.tbl_ligne = {
tbl_TXT_ligne_1,
tbl_TXT_ligne_2},
}; |
et un extrait du code de la fonction l'utilisant.
remarque: la fonction prv_Copy_null_teminated_string prend en argument (const BYTE tbl_texte_a_imprimer []).
Code:
1 2 3 4 5 6 7 8
|
VOID prv_Affichage_menu (PDEF_MENU pt_menu, BYTE indice_langue) {
const BYTE **tbl_texte;
tbl_texte = pt_menu->tbl_ligne[0];
prv_Copy_null_teminated_string (tbl_texte [indice_langue]);
} |
et bien sur le code appelant:
Code:
1 2
|
prv_Affichage_menu (&MENU_principale, CONST_LANGUE_FR); |
le code ne provoque aucune erreur, ni aucun warning et fonctionne bien.
mais ma question est : quelle serait la syntax pour ne pas passer par l'emploi de la variable local tbl_texte dans l'appel de la fonction prv_Copy_null_teminated_string ???
du style ;
Code:
1 2 3
|
prv_Copy_null_teminated_string (pt_menu->tbl_ligne[0][indice_langue])
ce code par contre ne fonctionne pas !!! |
j'espere avoir été assez clair et merci d'avance pour votre aide.