typedef struct bit0 : 1
这句话定义了一个位域,bit0是该位域的域名,而且bit0只占用一个位。
位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。
#define Uint unsigned int
typedef struct
{
Uint bit0 : 1;
Uint bit1 : 1;
Uint bit2 : 1;
Uint bit3 : 1;
Uint bit4 : 1;
Uint bit5 : 1;
Uint bit6 : 1;
Uint bit7 : 1;
Uint bit8 : 1;
Uint bit9 : 1;
Uint bit10 : 1;
Uint bit11 : 1;
Uint bit12 : 1;
Uint bit13 : 1;
Uint bit14 : 1;
Uint bit15 : 1;
}Bit; typedef struct
{
Uint bytel : 8;
Uint byteh : 8;
}Byte; typedef union
{
Bit bit;
Byte byte;
Uint port;
}UNport; #define PA ((volatile UNport *)(0x7000))
#define PA_Buffer ((volatile UNport *)(0x7001))
#define PA_Dir ((volatile UNport *)(0x7002))
#define PA_Attrib ((volatile UNport *)(0x7003))
#define PA_Latch ((volatile UNport *)(0x7004))
#define PB ((volatile UNport *)(0x7005))
#define PB_Buffer ((volatile UNport *)(0x7006))
#define PB_Dir ((volatile UNport *)(0x7007))
#define PB_Attrib ((volatile UNport *)(0x7008))
#define Poscu ((volatile UNport *)(0x7013))
#define Ptbu ((volatile UNport *)(0x700e))
#define Ptbc ((volatile UNport *)(0x700f))
#define Pt0 ((volatile UNport *)(0x700a))
#define Pt1 ((volatile UNport *)(0x700c))
#define Pt0u ((volatile UNport *)(0x700b))
#define Pt1u ((volatile UNport *)(0x700d))
#define Pintu ((volatile UNport *)(0x7010))
#define Pintc ((volatile UNport *)(0x7011))
#define Padm ((volatile UNport *)(0x7014))
#define Padl ((volatile UNport *)(0x702c))
#define Padu ((volatile UNport *)(0x7015))
#define Padmuxu ((volatile UNport *)(0x702b))
#define Pda0 ((volatile UNport *)(0x7017))
#define Pda1 ((volatile UNport *)(0x7016))
#define Pdau ((volatile UNport *)(0x702a))
#define Pwdogc ((volatile UNport *)(0x7012))
#define Pflashu ((volatile UNport *)(0x7555)) //------------------------------------------------------------------------------------------------------- //以下部分在编程中直接调用使用; #define Watchdog_Clear Pwdogc->port #define P0_0 PA->bit.bit0
#define P0_1 PA->bit.bit1
#define P0_2 PA->bit.bit2
#define P0_3 PA->bit.bit3
#define P0_4 PA->bit.bit4
#define P0_5 PA->bit.bit5
这种结构体定义方式书上没有解释?不明白什么意思?Uint bit: 1;
: 1?没见过?为什么这样可以将凌阳单片机的接口进行位定义?
回答:
一.
typedef struct
{
Uint bit0 : 1;
Uint bit1 : 1;
Uint bit2 : 1;
Uint bit3 : 1;
Uint bit4 : 1;
Uint bit5 : 1;
Uint bit6 : 1;
Uint bit7 : 1;
Uint bit8 : 1;
Uint bit9 : 1;
Uint bit10 : 1;
Uint bit11 : 1;
Uint bit12 : 1;
Uint bit13 : 1;
Uint bit14 : 1;
Uint bit15 : 1;
}Bit;
这个结构体有16个单元,每个单元一位,正好可以用于单片机中的数据保存和读取问题.应该是16位机吧
二.
typedef struct
{
Uint bit0 : 1;
Uint bit1 : 1;
Uint bit2 : 1;
Uint bit3 : 1;
Uint bit4 : 1;
Uint bit5 : 1;
Uint bit6 : 1;
Uint bit7 : 1;
Uint bit8 : 1;
Uint bit9 : 1;
Uint bit10 : 1;
Uint bit11 : 1;
Uint bit12 : 1;
Uint bit13 : 1;
Uint bit14 : 1;
Uint bit15 : 1;
}Bit; 每个成员各自占1个bit,这是按bit位来定义结构体的
typedef struct bit0 : 1的更多相关文章
- [转载]彻底弄清struct和typedef struct
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
- struct和typedef struct彻底明白了
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
- [C语言]关于struct和typedef struct
在C中定义一个结构体类型要用typedef: *************************************************************************** t ...
- struct和typedef struct用法
参考:http://www.cnblogs.com/qyaizs/articles/2039101.html C语言: typedef struct Student{ int score; }Stu; ...
- struct和typedef struct
转自:http://www.cnblogs.com/qyaizs/articles/2039101.html struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++ ...
- typedef struct 结构体
typedef struct _TTTT_ { int i; }TT_TT; 定义变量如下: struct _TTTT_ NewTT;方法1 TT_TT NewTT;方法2 是声明和定义 ...
- C语言中的struct和typedef struct<转载>
原文:http://www.nowamagic.net/librarys/veda/detail/1785 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数 ...
- C/C++语法知识:typedef struct 用法详解
第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定 ...
- struct和typedef struct的区别
当typedef与结构结合使用时,会有一些比较复杂的情况,而且在C语言和C++里面有略有差别,因此从网上摘录了一些资料. 1 首先: 在C中定义一个结构体类型要用typedef: ...
随机推荐
- 链接SQLServer数据库 导出csv文件
依赖::::<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>ms ...
- 用NI的数据采集卡实现简单电子测试之2——绘制三极管输出特性曲线(面)图
本文从本人的163博客搬迁至此. 想设计几个实验,既能展示NI的LabVIEW和数据采集卡的功能特点,又能够让普通电类专业本科学生可以理解,自然首先想到了<电子技术基础>课程的内容.第一个 ...
- WPF : ListBox的几种Template属性
原文:WPF : ListBox的几种Template属性 属性名 属性的类名 功能 示例 Template ControlTemplate 定义控件自身的外观.其子元素的布局可以自定义,也可以由It ...
- [Oracle]ORA-01499的处理
如果出现 ORA-01499,说明 table 和 index之间的相互参照出了错: http://iderror.com/errors/oracle/oracle-db/ora-00900-to-o ...
- 【转载】Direct3D HLSL介绍(上)
原文路径:http://www.csharpwin.com/csharpspace/3087.shtml 写过Direct3D程序的朋友们可能还记得,在以往,大家常为如何表现更多真实的材质(如玻璃.金 ...
- 13-[Mysql]--pymysql模块
1.介绍 之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要事 ...
- Python_sklearn机器学习库学习笔记(六) dimensionality-reduction-with-pca
# 用PCA降维 #计算协方差矩阵 import numpy as np X=[[2,0,-1.4], [2.2,0.2,-1.5], [2.4,0.1,-1], [1.9,0,-1.2]] np.c ...
- ecCodes 学习 利用ecCodes Python API对GRIB文件进行读写
参考 https://www.ecmwf.int/assets/elearning/eccodes/eccodes2/story_html5.htmlhttps://confluence.ecmwf. ...
- hdu1829A Bug's Life(种类并查集)
传送门 关键在于到根节点的距离,如果两个点到根节点的距离相等,那么他们性别肯定就一样(因为前面如果没有特殊情况,两个点就是一男一女的).一旦遇到性别一样的,就说明找到了可疑的 #include< ...
- 13-调试Dockerfile
包括 Dockerfile 在内的任何脚本和程序都会出错.有错并不可怕,但必须有办法排查,所以本节讨论如何 debug Dockerfile. 先回顾一下通过 Dockerfile 构建镜像的过程: ...