ktzhan
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2005-11-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2158回复:4

一个ISP1582固件的语法问题

楼主#
更多 发布于:2004-04-18 23:16
以下是philips提供的ISP1582固件中定义的一个union,但是我看不懂它的语法,尤其是“IRQL_1 unsigned char    reserved1 : 1;”这一句。

请教了,谢谢!

#define IRQL_1
#define IRQL_0

typedef union _ISP1581FLAGS {
struct _ISP1581FSM_FLAGS
{
IRQL_1 unsigned char    reserved1 : 1;
IRQL_1 unsigned char    suspend : 1;

IRQL_0 unsigned char    configuration : 1;
IRQL_0 unsigned char    remote_wakeup : 1;

IRQL_0 unsigned char    testmodeen : 1;
IRQL_0 unsigned char    testmode : 3;

IRQL_1 unsigned char    DCP_state : 4;    
IRQL_1 unsigned char    CONTROL_HANDLE_DONE : 1;    
//true iso
IRQL_1 unsigned char    ISO_state : 3;
IRQL_1 unsigned char    ISO_CONFIG : 1;

} bits;

unsiged long value;

} ISP1581FLAGS;
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-19 13:21
以下是philips提供的ISP1582固件中定义的一个union,但是我看不懂它的语法,尤其是“IRQL_1 unsigned char    reserved1 : 1;”这一句。

请教了,谢谢!

#define IRQL_1
#define IRQL_0

typedef union _ISP1581FLAGS {
struct _ISP1581FSM_FLAGS
{
IRQL_1 unsigned char    reserved1 : 1;
IRQL_1 unsigned char    suspend : 1;

IRQL_0 unsigned char    configuration : 1;
IRQL_0 unsigned char    remote_wakeup : 1;

IRQL_0 unsigned char    testmodeen : 1;
IRQL_0 unsigned char    testmode : 3;

IRQL_1 unsigned char    DCP_state : 4;    
IRQL_1 unsigned char    CONTROL_HANDLE_DONE : 1;    
//true iso
IRQL_1 unsigned char    ISO_state : 3;
IRQL_1 unsigned char    ISO_CONFIG : 1;

} bits;

unsiged long value;

} ISP1581FLAGS;


很基本的C语言语法问题,看来你C语言还不行。

#define IRQL_1
#define IRQL_0

说明下面的IRQL_1、IRQL_0基本没什么意义了,不用讨论。

IRQL_1 unsigned char reserved1 : 1;
IRQL_1 unsigned char suspend : 1;
IRQL_0 unsigned char configuration : 1;
IRQL_0 unsigned char remote_wakeup : 1;
IRQL_0 unsigned char testmodeen : 1;
IRQL_0 unsigned char testmode : 3;
表示这几个数据共占用1个字节D[7-0],其中
reserved1        代表D[0]     1bit
suspend          代表D[1]     1bit
configuration    代表D[2]     1bit
remote_wakeup    代表D[3]     1bit
testmodeen       代表D[4]     1bit
testmode         代表D[7-5]   3bits

这种结构体定义方法在寄存器定义中很常用

www.dragon-2008.com 欢迎交流
ktzhan
驱动牛犊
驱动牛犊
  • 注册日期2002-10-16
  • 最后登录2005-11-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-20 23:34
谢谢!我的C还真不行,见笑了。

关于几个数据共占用1个字节(即位段)我在书上看到了。但是IRQL_1、IRQL_0既然没什么意义为什么还要这么做?有什么用吗,比如在多平台移值方面?
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-21 13:12
谢谢!我的C还真不行,见笑了。

关于几个数据共占用1个字节(即位段)我在书上看到了。但是IRQL_1、IRQL_0既然没什么意义为什么还要这么做?有什么用吗,比如在多平台移值方面?


就我所知道的来说有两种意义:
1.可以用在多平台移植方面;
2.表明一定的意义;例如DDK中的“IN ,OUT”只是表明数据的方向。
www.dragon-2008.com 欢迎交流
leadphone
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2008-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-22 09:53
我的理解
irql应该是int request level的意思
...........IRQL_0是低电平?IRQL_0是高电平?可能

这种定义估计更多的是从程序可读性的角度出发,正如楼上所说,如WINDOW程序中的IN,OUT/
游客

返回顶部