USB论坛-百合电子工作室USB专题站

标题: 程序代码问题(共用体EPPFLAGS怎么理解) [打印本页]

作者: 玩玩    时间: 2015-9-27 11:44
标题: 程序代码问题(共用体EPPFLAGS怎么理解)
typedef union _epp_flags
{
        struct _flags
        {
                INT8U bus_reset                   : 1;        //总线复位标志
                INT8U suspend                     : 1;        //挂起改变标志
                INT8U setup_packet                    : 1;        //收到SETUP包
                INT8U remote_wakeup                           : 1;        //远程唤醒标志(未使用)
                INT8U in_isr                              : 1;        //USB中断服务标志
                INT8U control_state                        : 2;        //控制端点处理标志
                                                                                                        //0: IDLE           空闲状态
                                                                                                        //1: TRANSMIT  数据发送状态
                                                                                                        //2: RECEIVE   数据接收状态
                 INT8U configuration                        : 1;        //配置标志(0: 未配置; 1: 已经配置)
                INT8U command                                : 1;        //未使用
                INT8U ep1_rxdone                        : 1;        //端点 1 收到数据标志
                INT8U ep2_rxdone                        : 1;        //端点 2 收到数据标志
                INT8U ep2buf_full                        : 1;        //端点 2 接收双缓冲区满标志
        } bits;
        INT16U value;
} EPPFLAGS;
作者: 玩玩    时间: 2015-9-27 11:46
共用体和结构体都有,到底哪些变量是结构体,那些变量是共用体!还是整个结构体都是共用体的变量!
作者: baiheee    时间: 2015-9-27 22:36
这句代码的结果是定义了一个共用体变量EPPFLAGS,占用两个字节存储空间,“INT16U value”这句用于占位,目的是为变量EPPFLAGS分配两个字节存储空间,实际使用时EPPFLAGS变量只用到其内部字义的结构体,结构体只用了12个位,余下6个位无意义

其实建议学习USB时不要过多关注USB接口芯片的固件程序底层驱动代码,应该将精力放在USB的枚举过程、各种命令及描述符等。




欢迎光临 USB论坛-百合电子工作室USB专题站 (http://usb.baiheee.com/usb_bbs/) Powered by Discuz! X2.5