求助,关于WINAVR的一个很高级的用于位操作的宏定义,忘记了,哪位大侠给个网址吧!!!
之前在这个论坛上看到过一个很高级的WINAVR的宏定义的代码,只记得代码很长,而且里面有很多“###”符号,然后定义这个宏之后,只要通过简答的宏定义,比如:#define LED0_OUT XXXXXXXXXX //这里的“XXXXX"表示之前定义的那个很高级的宏
然后就可以简单的位操作了,像下面那样子:
LED_OUT = 1;
可是现在怎么都找不到那个宏的定义了,希望知道在什么地方的大侠给指引一下,谢谢了!!! 功夫不负有心人啊,终于给我找到了:
#ifndef __BITWISE_H
#define __BITWISE_H
#ifdef __cplusplus
extern "C" {
#endif
#define _BITFIELD_(_W) \
typedef union { \
struct { \
uint8_t used :_W; \
}; \
uint8_t dummy; \
} _bit_0_ ## _W ## _t
#define _BITFIELD1_(_S, _W) \
typedef union { \
struct { \
uint8_t :_S; \
uint8_t used :_W; \
}; \
uint8_t dummy; \
} _bit_ ## _S ## _ ## _W ## _t
_BITFIELD_(1);
_BITFIELD_(2);
_BITFIELD_(3);
_BITFIELD_(4);
_BITFIELD_(5);
_BITFIELD_(6);
_BITFIELD_(7);
_BITFIELD_(8);
_BITFIELD1_(1, 1);
_BITFIELD1_(1, 2);
_BITFIELD1_(1, 3);
_BITFIELD1_(1, 4);
_BITFIELD1_(1, 5);
_BITFIELD1_(1, 6);
_BITFIELD1_(1, 7);
_BITFIELD1_(2, 1);
_BITFIELD1_(2, 2);
_BITFIELD1_(2, 3);
_BITFIELD1_(2, 4);
_BITFIELD1_(2, 5);
_BITFIELD1_(2, 6);
_BITFIELD1_(3, 1);
_BITFIELD1_(3, 2);
_BITFIELD1_(3, 3);
_BITFIELD1_(3, 4);
_BITFIELD1_(3, 5);
_BITFIELD1_(4, 1);
_BITFIELD1_(4, 2);
_BITFIELD1_(4, 3);
_BITFIELD1_(4, 4);
_BITFIELD1_(5, 1);
_BITFIELD1_(5, 2);
_BITFIELD1_(5, 3);
_BITFIELD1_(6, 1);
_BITFIELD1_(6, 2);
_BITFIELD1_(7, 1);
#define SFR(_P, _S, _W) (*(_bit_ ## _S ## _ ## _W ## _t volatile*)(_SFR_ADDR(_P))).used
#ifdef __cplusplus
}
#endif
#endif
#define LED SFR(PORTB, 0, 1)
LED = 1;
#define LED SFR(PORTB, 0, 2)
LED = 3;
看到没,不仅可以一位一位的操作,还可以两位两位的操作,比Keil那个还要强大!!!!
就是不知道,这样操作对效率的影响到底有多大!!!! 这个够厉害! 收藏一下啊!感谢楼主 XIVN1987 发表于 2012-2-11 10:37 static/image/common/back.gif
功夫不负有心人啊,终于给我找到了:
#ifndef __BITWISE_H
可以解释吗? iar中这句应该怎么定义,谢谢
#define SFR(_P, _S, _W) (*(_bit_ ## _S ## _ ## _W ## _t volatile*)(_SFR_ADDR(_P))).used
页:
[1]