初级会员

- 积分
- 151
- 金钱
- 151
- 注册时间
- 2018-1-31
- 在线时间
- 49 小时
|
1金钱
最近知道C语言有一个叫位域的东西,查了下资料,知道起什么作用的,对于STM32不能声明一个位变量来说是非常好用的一个功能
摸索了一下,遇到一个问题就是 位域怎么定义全局类型呢,
比如我在DS18B20.c中定义一个位域,要在DS1302.c中使用要怎么写呢?
举例:
//这里是ds18b20.c的文件代码
#include "XXX.h"
union //共用体类型定义
{
u16 all; //定义all 为16 位无符号整型变量
struct //结构体类型定义
{
u16 Bit1:1; //0 位Bit1 取寄存器最低位0 位,以下顺序取1 位直到最高位
u16 Bit2:1; //1
u16 Bit3:1; //2
u16 Bit4:1; //3
u16 Bit5:1; //4
u16 Bit6:1; //5
u16 Bit7:1; //6
u16 Bit8:1; //7
u16 Bit9:1; //8
u16 Bit10:1; //9
u16 Bit11:1; //10
u16 Bit12:1; //11
u16 Bit13:1; //12
u16 Bit14:1; //13
u16 Bit15:1; //14
u16 Bit16:1; //15
}bit; //bit为具有所定义的结构体类型的变量
}CtrlBit; //CtrlBit 为具有所定义的共用体类型的变量
//----------------------------------------------------------------------------------------------------------------
//-----------------------------------然后再给位域复制-------------------------------------------------------
CtrlBit.bit.Bit1=1;//这条代码放在ds18b20.c代码下可以正常编译不会报错
//--------------------------------在ds1302下赋值就会报错
CtrlBit.bit.Bit1=1;//这条代码是在ds1302.c文件里面,编译的时候报错,提示CtrlBit 未定义,
可是在 ds18b20.h 文件下添加 extern CtrlBit;还是不可以
我知道问题出在定义位域的时候不是全局位域,可是我不知道怎么定义全局位域!!!!
|
|