代码之家  ›  专栏  ›  技术社区  ›  girikks

结构值未在主源文件中更新

  •  1
  • girikks  · 技术社区  · 7 年前

    button_key.h, button_key.h, lcd.h, mani.c

    在button\u键中使用了结构。H并声明为

    struct menu {
                 uint8_t Hour;
                 uint8_t Minute;
                 uint8_t Second;
                };
    

    在里面 main.c 源文件

    #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.
    
    }
    

    结构用于 button_key.c

     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 
     }
    

    1 回复  |  直到 7 年前
        1
  •  4
  •   Yunnosch    7 年前

    根据评论编辑答案:

    缺乏更新只是 看得见的

    这个 原因

    menu_key_display (s1,menu_display);
    //                ^
    

    为了使函数内部的更改在外部可见,
    您需要使用“通过引用调用”,这在C中表示“通过指针”。

    因此,将冒犯行更改为:

    menu_key_display (ptr,menu_display);
    

    当然,这必须与被调用函数行的更改相匹配:

    void menu_key_display(struct menu *s1Ptr, const char *menu_display[])
    // ...
    UP_Down_Keyvalue(s1Ptr,2,4); // assuming this to be supposed to have the missing effect
    //                ^
    

    UP_DownKeyvalue(...) 也以类似的方式发挥作用。 UP_Down_Keyvalue(*s1Ptr,2,4); 可以在不更改宏定义的情况下使用。

    注意,在使用指针时,您可能希望向函数添加检查,以确保指针不为NULL。可以称之为偏执狂,但偏执狂是程序员(至少是嵌入式程序员)的一种健康心态。