映射位到某个RAM变量的方法

描述

问:我想访问某个字节中的单个位,但是当我尝试用绝对变量结构定义一个位变量时,例如:

static bit bitvar @ ((unsigned)&bytevar)*8+0;

我得到一个编译错误。我该怎么做?

答:简单地回答是,你不能这么做。使用@定义绝对变量结构,在编译时需要一个已知地址。(译者注:编译器编译到这一行时,bytevar的地址并不确定)

更详细的(可能也是更有用的)回答是,这要看具体你是要做什么。你可能会在下面的一些简单的宏定义中找到你所需要的东西:

#define testbit(var, bit) ((var) & (1 <<(bit)))

#define setbit(var, bit) ((var) |= (1 << (bit)))

#define clrbit(var, bit) ((var) &= ~(1 << (bit)))

或者你可以定义一个联合union,例如:

union both {

unsigned char byte;

struct {

unsigned bit0:1; // etc.

} bits;

} var;

于是你就可以直接引用var.byte或者var.bits.bit0。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分