wince上面能不能定义位变量,,就像51那样,
sbit led=P2^0;这种,操作led这个变量就是操作那个引脚了,,,
arm上面有没有类似的定义??用宏也行
我想定义位变量 单独操作某个IO口,,比如GPF0,,想不到办法~~
ARM上没有位运算的变量,不过可以通过控制IO寄存器来实现某个IO口操作。
在CE下的话还需要编写符合微软规范的驱动程序。偶也是刚学,呵呵,就知道这么多了。
在WinCE上要想操作GPIO口,就得写驱动程序,通过虚拟地址映射来控制IO口,楼主可以先探索一下如何控制IO口吧,可以参考一下如何写GPIO流驱动。
给点提示你:
GPF0 &=~(1<<0);//GPF0 置低
GPF0 |=(1<<0); //GPF0 置高
引用: 引用 4 楼 linux_lee 的回复:
给点提示你:
GPF0 &=~(1<<0);//GPF0 置低
GPF0 |=(1<<0); //GPF0 置高
呵呵,写错了,改正下:
GPFDAT &=~(1<<0);//GPF0 置低
GPFDAT |=(1<<0); //GPF0 置高
一、定义一个字节(8位)的位变量,既可按字节访问也可按位进行访问
union flag // 先定义一个联合flag
{
unsigned char val; // 再定义该联合中的一个字节型变量val
struct // 定义一个结构型数据,构成位域。
{
unsigned char B0:1; // B0~B7为每一位的名称,可用其他名称替换,例如B0可写成FLAG0。
unsigned char B1:1; // B1可写成FLAG1
unsigned char B2:1; // B2可写成FLAG2
unsigned char B3:1; // B3可写成FLAG3
unsigned char B4:1; // B4可写成FLAG4
unsigned char B5:1; // B5可写成FLAG5
unsigned char B6:1; // B6可写成FLAG6
unsigned char B7:1; // B7可写成FLAG7
} bits; // 再定义该联合中的另一个结构型变量bits
};
volatile union flag flag; // 最后,定义该联合的变量flag,注意这句话中有两点要弄清楚,关键字volatile的本意是“易变”,在C30中一般不能省略;第一个flag是联合的名称,第二个flag是该联合的变量,这第二个flag可写成其他任意名称,例如lcd_ctrl等等。
有了上述定义就可以引用了,引用方法如下:
当按字节操作时,例如这样:flag.val = 0xAA; //变量flag被赋值:0xAA。
当按位操作时,例如这样:flag.bits.B0 = FALSE; // 0
flag.bits.B1 = TRUE; // 1
flag.bits.B2 = FALSE; // 0
flag.bits.B3 = TRUE; // 1
flag.bits.B4 = FALSE; // 0
flag.bits.B5 = TRUE; // 1
flag.bits.B6 = FALSE; // 0
flag.bits.B7 = TRUE; // 1
在上述定义中,C30在内存中只分配一个字节的变量flag,因而操作起来极为方便,如果将上述定义中的volatile关键字去掉,也可应用于keil c51中,以解决51单片机中位变量有限(20H~2FH共128个位)的矛盾。
二、定义一个字(16位)的位变量,既可按字访问也可按位进行访问
这和定义字节位变量的方法相同,请看:
union flag // 先定义一个联合flag
{
unsigned int val; // 再定义该联合中的一个字变量val
struct // 定义一个结构型数据,构成位域。
{
unsigned char B0:1; // B0~B7为每一位的名称,可用其他名称替换,例如B0可写成FLAG0。
unsigned char B1:1; // B1可写成FLAG1
unsigned char B2:1; // B2可写成FLAG2
unsigned char B3:1; // B3可写成FLAG3
unsigned char B4:1; // B4可写成FLAG4
unsigned char B5:1; // B5可写成FLAG5
unsigned char B6:1; // B6可写成FLAG6
unsigned char B7:1; // B7可写成FLAG7
unsigned char B8:1; // B8写写成FLAG8
unsigned char B9:1; // B9可写成FLAG9
unsigned char B10:1; // B10可写成FLAG10
unsigned char B11:1; // B11可写成FLAG11
unsigned char B12:1; // B12可写成FLAG12
unsigned char B13:1; // B13可写成FLAG13
unsigned char B14:1; // B14可写成FLAG14
unsigned char B15:1; // B15可写成FLAG15
} bits; // 再定义该联合中的另一个结构型变量bits
};
volatile union flag flag; // 最后,定义该联合的变量flag。
当按字操作时,例如这样:flag.val = 0x55AA; // 变量flag被赋值:0x55AA。
当按位操作时,例如这样:flag.bits.B0 = FALSE;// 0
flag.bits.B12 = TRUE;// 1
在上述定义中,C30在内存中分配一个字变量flag。
这是摘录的东西。可以用这种方法定义位变量。用共用体的方式对IO口进行操作是经常使用的一个手段。建议楼主查一下相关的资料。这个问题就很容易解决。看一下定义管脚是如何实现的。
另外,需要用流驱动的方式来调用你的底层。