我开发了一个使用MindTree蓝牙SDK的嵌入式应用程序。

我在头文件中有以下内容:

typedef struct {
    UCHAR outputDir;
    UCHAR reset;
    UCHAR nack;
    UCHAR startCondition;
    UCHAR stopCondition;
    UCHAR busy;
} USCI_ConfigurationFlags;

static USCI_ConfigurationFlags usciConfigFlags = { UCTR, UCSWRST, UCNACKIFG, UCTXSTT, UCTXSTP, UCBBUSY };

稍后,在两个.c文件中,我包括上面的 header ,并有时在中断内的不同场合使用 usciConfigFlags

这合法吗?

在SDK中调用BT_bluetooth_on方法之后,我试图理解为什么(以及是否与问题相关)结构的值在运行时更改。

谢谢,
亚当。

最佳答案

此处的static并不意味着您认为的含义。这意味着声明和变量仅在一个编译单元中可见。也就是说,您有两个独立的usciConfigFlags实例。

如果需要全局变量,则需要使用extern而不是static,并在一个c文件中使用初始值进行实际声明(不使用extern)。

还要担心在没有适当锁定的情况下更改结构中的值。只读并发访问通常很好。

关于c - C头文件中的静态结构声明和初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12557769/

10-11 18:50