OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2180|回复: 3

请教STM32全局位域(位段)的定义?

[复制链接]

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-1-31
在线时间
49 小时
发表于 2019-8-8 19:44:08 | 显示全部楼层 |阅读模式
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;还是不可以


我知道问题出在定义位域的时候不是全局位域,可是我不知道怎么定义全局位域!!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-1-31
在线时间
49 小时
 楼主| 发表于 2019-8-8 19:45:03 | 显示全部楼层
//----------------------------------------------------------------------------------------------------------------
//-----------------------------------然后再给位域复制-------------------------------------------------------
CtrlBit.bit.Bit1=1;//这条代码放在ds18b20.c代码下可以正常编译不会报错
//--------------------------------在ds1302下赋值就会报错
CtrlBit.bit.Bit1=1;//这条代码是在ds1302.c文件里面,编译的时候报错,提示CtrlBit 未定义,
可是在 ds18b20.h 文件下添加   extern CtrlBit;还是不可以


注意问题的关键在这里
回复

使用道具 举报

5

主题

179

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
8195
金钱
8195
注册时间
2016-9-7
在线时间
1113 小时
发表于 2019-8-8 20:31:38 | 显示全部楼层
        u32 all; //定义all 为32 位无符号整型变量  
struct //结构体类型定义  
{  
u32 Bit1:1; //0 位Bit1 取寄存器最低位0 位,以下顺序取1 位直到最高位
...
回复

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-1-31
在线时间
49 小时
 楼主| 发表于 2019-8-8 22:18:23 | 显示全部楼层
lrzxc 发表于 2019-8-8 20:31
u32 all; //定义all 为32 位无符号整型变量  
struct //结构体类型定义  
{  

还是不对  
在main函数下 写  CtrlBit.bit.Bit1=1;
编译的时候提示
test.c(108): error:  #20: identifier "CtrlBit" is undefined
CtrlBit.bit.Bit1=1;
现在的关键问题是  我不知道修改什么地方可以定义全局位域的变量
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-5 12:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表