partie de mon projet certains des fichiers source sont button_key.h, button_key.h, lcd.h, mani.c
etc.Valeur de la structure n'est pas mise à jour dans le principal fichier source
utilisé un structre dans button_key.H et a déclaré que
struct menu {
uint8_t Hour;
uint8_t Minute;
uint8_t Second;
};
Dans main.c
fichier source
#include "lcd.h"
#include "delay.h"
#include "button_key.h"
struct menu s1= {0};
struct menu *ptr;
int main(void)
{ int a;
ptr = &s1;
//some code//
menu_key_display (s1,menu_display);
LCD_DisplayNumber(10,(*ptr).Hour,2); // here not updating the structure value as per the code in button_key.c only show zero (0)
while(1);
// tried also LCD_DisplayNumber(10,s1.Hour,2); also seems same reult.
}
Et le structre est utilisé dans button_key.c
fichier comme (seule la partie du code)
void menu_key_display(struct menu s1,const char *menu_display[])
{ //some cdoe here
case 1: // set time
{
LCD_Clear();
LCD_GoToLine(0);
LCD_DisplayString(menu_display[5]);
LCD_GoToLine(1);
LCD_DisplayString(" HH:MM:SS:PM/AM");
UP_Down_Keyvalue(s1,2,4);
break;
// some code
}
Le code source ci-dessus a apporté des modifications, les valeurs aux membres de la structure de menus. Mais ces changements ne reflètent pas dans main.c ce qui est le problème avec moi.
Vous devez transmettre 'ptr' à la fonction. – user3386109
Les arguments dans 'c' sont transmis par valeur. Lorsque vous passez '.Hour' dans' LCD_DisplayNumber', une copie locale est faite. Toutes les modifications apportées à cette copie locale sont perdues lorsque la fonction renvoie. Si vous voulez que 's1.Hour' conserve sa valeur quand la fonction retourne, vous devez passer un pointeur à' LCD_DisplayNumber' et le déréférencer dans la fonction. – yano
Passez comme __struct menu * __ et utilisez s1-> au lieu de s1. – cup