STM32中用extern申明结构体
时间: 2025-02-01 09:28:54 浏览: 60
### 如何在 STM32 中使用 `extern` 声明结构体变量
#### 使用场景
当希望在整个项目中的多个文件之间共享某个特定的结构体实例时,可以利用 `extern` 关键字来完成这一需求。这使得可以在一个源文件中定义该结构体的具体内容,在其他的 C 文件里通过声明的方式访问这个已经存在的对象而不需要再次创建新的副本。
#### 实现方法
##### 头文件 (`.h`) 的编写
假设有一个名为 `config.h` 的头文件用于存放公共的数据类型定义以及对外部资源的前置声明:
```c
#ifndef CONFIG_H_
#define CONFIG_H_
// 定义一个简单的配置参数结构体
typedef struct {
uint8_t baudRate;
bool isDebugModeEnabled;
} SystemConfig;
// 向其他模块宣告存在这样一个全局性的 system_config 变量,但是并不在此处分配实际的空间
extern SystemConfig system_config;
#endif /* CONFIG_H_ */
```
上述代码片段展示了如何在一个 `.h` 文件内描述一种自定义类型的结构并对其成员进行了初始化[^3];同时也向外界表明了当前工程中有这么一块叫做 `system_config` 的内存区域等待被引用。
##### 源文件 (`.c`) 的实现部分
接着是在某一处具体的 `.c` 文件比如说是 `main.c` 或者专门用来管理这些设置项的地方真正建立起对应的实体:
```c
#include "config.h"
// 此处在 .c 文件内部正式地构建起之前提到过的那个 structure instance 并赋予初始值
SystemConfig system_config = {9600, false};
```
这里完成了对于先前仅作为占位符出现的对象的实际化操作——不仅指定了其确切的位置还设置了默认属性值[^4]。
##### 应用示例外观调用
最后就是在任意需要用到此设定集合的地方简单加入如下形式的一句即可轻松获取到想要的信息而不必担心重复制造同样的东西造成混乱:
```c
#include "config.h"
void someFunction() {
// 修改波特率
system_config.baudRate = 115200;
if(system_config.isDebugModeEnabled){
printf("Debug mode enabled\n");
}
}
```
这样就实现了跨文件间的高效协作模式,既保持了良好的封装性又方便维护和扩展。
阅读全文
相关推荐














