c - c头文件中的静态结构声明和初始化

标签 c struct embedded header-files microcontroller

我开发了一个使用 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 并使用初始值进行实际声明(没有 extern)您的一个 c 文件中的值。

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

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

相关文章:

c - 串行读取时丢失数据

c - 为什么这个引导加载程序只打印 'S'

c - 双重否定-(-n)的原因是什么?

javascript - 二元运算在同一台机器上的不同输出

c++ - C 程序获得不同的输出?这个程序应该输出什么?

c++ - 结构中的 union 初始化

编译错误,成员不是 union 体的成员 |使用指针/结构

go - 如何为指向不同结构的指针实现相同的功能?

无法在STM32F4微 Controller 上闪烁LED

c - 有没有办法用位字段声明无符号固定宽度整数?