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
et bien sur le texte.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 };
menu.h pour la declaration du menu (qui peut contenir plusieurs lignes 3, 4 u 7 par exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 extern const BYTE *tbl_TXT_ligne_1 []; extern const BYTE *tbl_TXT_ligne_2 [];
menu.c qui initialise une variable de type menu et qui contient la fonction l'utilisant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct struct_menu { BYTE nbr_ligne; const BYTE** tbl_ligne[10]; }DEF_MENU,*PDEF_MENU;
et un extrait du code de la fonction l'utilisant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DEF_MENU MENU_principale = { .nbr_ligne = 2, .tbl_ligne = { tbl_TXT_ligne_1, tbl_TXT_ligne_2}, };
remarque: la fonction prv_Copy_null_teminated_string prend en argument (const BYTE tbl_texte_a_imprimer []).
et bien sur le code appelant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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]); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ;
j'espere avoir été assez clair et merci d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 prv_Copy_null_teminated_string (pt_menu->tbl_ligne[0][indice_langue]) ce code par contre ne fonctionne pas !!!
Partager