"); //-->
硬件开发过程中经常需要操作的对象是按bit来存储的,也就是我们经常所说的单片机或者ARM中某一个寄存器的某一位或者某几位是需要操作的对象。但是C语言中最小的存储单元是以char也就是字符型为最小的标准的,也就是1个字节即8个bits。
硬件中的寄存器在C语言中实质就死一个个的结构体,8051中的寄存器通常为1个字节,也就是8个bits,通常称为8位。比如51单片几种的TCON 寄存器如下图所示:其中每一位比如IE1、IE0在内存中实质是以位域的形式存在的具体的形式如下:
D7 D6 D5 D4 D3 D2 D1 D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
struct TCON_BIT{ //位域的基本使用
unsigned char IT0:1;//也就是占用uchar中的第一个bit
unsigend char IE0:1;//也就是占用uchar中的第二个bit
unsigend char IT1:1;
unsigend char IE1:1;
unsigend char TR0:1;
unsigend char TF0:1;
unsigend char TR1:1;
unsigend char TF1:1;//占用uchar的第8个bit
};
union TCON
{
unsigned char all;
struct TCON_BIT;
};
其中struct TCON_BIT就是采用了位域的形式定义的。位域还存在很多其他的限制条件,具体的问题问问gooogle吧。对做个Nios2开发的朋友就会意识到位于操作的优势,能够大大减小内存的使用。很适合硬件操作。
位域的基本定义形式为:
基本类型(int,char...) 位域变量名(IE0,IT0,....) :number
其中基本类型就是C语言中的基本类型。
位域名就是该位的名字,比如IT0等
:number 就是占有的位宽,最小为1,最大为8,其中“:”是一定要有的,这是位域的标示。
位域操作相比传统的#define有较大的优势,比较直接,便于控制。同时TI官方提供的资源中很多都采用位域
定义新的MCU,这也说明了位域操作越来越得到重视。因此作出自己学习的总结。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
CAT32驱动白光LED
LED-6B595驱动的LED显示电路设计(共阴)
CAT3200 CAT3200-5低噪声可调电荷泵DC-DC转换器 (...
有什么方法能调试BOOTLOADER
各位大哥,有谁会测色色差计的没有?(跪求)
LED-并行LED数码管动态扫描显示电路(共阴)
技术干货 | 为什么 TI DLP® 技术的彩虹效应正在逐渐消失
ASML:High NA EUV 光刻机,2027~2028年实现大规模量产
CAT3604 4路调节电荷泵白色LED驱动器
模拟芯视界 | 选择电机控制中的位置传感器
技术干货 | 利用 CC2340R5 启用 Apple® Find My® Network 功能
ADI公司LDO的电容选择指南
电连接器检验仪器应用研究(下)
CAT3200 CAT3200-5低噪声可调电荷泵DC-DC转换器
CAT3604 4路调节电荷泵白色LED驱动器 (英)
求SHDSL芯片资料
浩亭2025财年收官,全球布局驱动强劲增长
四天一单,谁在涌入半导体赛道?
2025年前三季度全球腕戴设备市场同比增长10%
生物医学传感与检测技术(下)
生物医学传感与检测技术(上)
利用光导发射元件检测微小位移的电路
LED-74HC164驱动的LED显示电路设计(共阳)
如何让uclinux上电自动运行用户应用程序?
6B595驱动的LED显示电路设计(共阳)
[求助]需要三星公司原版的2410 BootLoader代码
2025年第三季度,半导体营收首次单季突破2000亿美元,行业整体增长加速
简化设计,降低BOM成本,纳芯微推出NSI1611系列隔离电压采样芯片
用于医疗保健领域的ADI公司身体传感器和MEMS器件(上)
EEPW专访ERNI公司高管