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

全球结构不起作用[关闭]

  •  -2
  • puzzled  · 技术社区  · 7 年前

    我用Xmega编程,我需要在多个文件中使用一些标志。 因此,我在h文件中将该标志声明为extern,并在主文件中将其初始化为全局。

    #ifndef GLOBAL_H_
    #define GLOBAL_H_
    
    typedef struct GLOBAL_FLAGS {
        volatile uint8_t pidTimer:1;
        volatile uint8_t dummy:7;
    }GLOBAL_FLAGS;
    
    // declaration
    extern GLOBAL_FLAGS gFlags;
    
    #endif
    

    主要的c:

    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include "global.h"
    #include "hv.h"
    #include "pid.h"
    
    // init
    gFlags = {.pidTimer = 0, .dummy = 0};
    
    // code....
    int main(void){
    // code....
    // example use of flag
    if(gFlags.pidTimer){
            hv_run_pid();
            gFlags.pidTimer = 0;
        }
    

    当我这样做的时候,我会犯一些错误。

    我初始化它的地方得到了这个:

    • GFLAG的冲突类型

    • 字段名不在记录或联合初始值设定项中

    • 数据定义没有类型或存储类

    • 在“gflags”的声明中,类型默认为“int”

    错误:

    • 在非结构或联合中请求成员“pidTimer”

    1 回复  |  直到 7 年前
        1
  •  0
  •   puzzled    7 年前

    谢谢

    我换了

    // init
    gFlags = {.pidTimer = 0, .dummy = 0};
    

    // init
    GLOBAL_FLAGS gFlags;
    

    这是可行的。