新闻  |   论坛  |   博客  |   在线研讨会
C语言位域在硬件控制中的运用
gongping11 | 2011-08-06 22:37:48    阅读:1405   发布文章

硬件开发过程中经常需要操作的对象是按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,这也说明了位域操作越来越得到重视。因此作出自己学习的总结。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客