c头文件中的静态结构声明和初始化
我开发了一个使用MindTree蓝牙SDK的嵌入式应用程序 我的头文件中包含以下内容:c头文件中的静态结构声明和初始化,c,struct,embedded,header-files,microcontroller,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 usciConfi
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文件中,我包含了上面的头文件,并在不同的场合使用uscionfigflags,有时在中断中使用
这合法吗
我试图理解为什么在SDK中调用BT_bluetooth_on方法后,结构的值在运行时会发生变化(如果与问题相关)
谢谢,
亚当。
静态的
这里并不是你认为它的意思。这意味着声明和变量只在一个编译单元中可见。也就是说,您有两个独立的uscionfigflags
实例
如果需要全局变量,则需要使用extern
而不是static
,并使用其中一个c文件中的初始值进行实际声明(无extern
)
也要厌倦在没有正确锁定的情况下更改结构中的值。只读并发访问通常是可以的。在两个
.c
文件中包含头是没有问题的。static
修饰符限制文件中变量的可访问范围,仅包括标题。两个不同文件中的两个uscionfigflags
不相同
而且静态
并不意味着恒定。因此,您可以以任何方式修改结构的值
以下是来自
在计算机编程中,静态变量是一个已被修改的变量
静态分配-其生存期在整个
节目。这与更短暂的自动控制形成对比
变量(局部变量),其存储已分配和
在调用堆栈上解除分配;与那些
存储是动态分配的
将静态关键字预先添加到变量中,使其仅在当前转换单元中可见(即,如果在函数中,则仅该函数;如果在文件中,则仅该文件) 在头文件中定义变量从来都不是一个好主意。即使您需要在两个同名的不同文件中使用两个静态变量,最好还是将.c文件本身放进去,因为它有助于更好的维护性和可读性,因为您将清楚地知道它在哪些文件中实际存在并正在使用 如果您将其添加到头文件中,那么在以后的某个点上,如果其他.c文件包含此头文件,那么该翻译单元将不必要地包含此变量
EpSalon提出了其他可以考虑的优点。
是的,我倾向于考虑在.h头文件中初始化全局值是个坏主意。