问:我想访问某个字节中的单个位,但是当我尝试用绝对变量结构定义一个位变量时,例如:
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。
-
RAM
+关注
关注
8文章
1383浏览量
115523 -
编译器
+关注
关注
1文章
1645浏览量
49482 -
变量
+关注
关注
0文章
613浏览量
28579
发布评论请先 登录
相关推荐
stm32编程的话,变量定义成8位好还是16位号?
芯海通用 MCU 应用笔记:在 MDK 开发环境下代码重定向到 RAM 执行的几种方法
请问ESP32如何实现Flash到ram重映射这种功能呢?
如何将变量定义在外部RAM呢?
ESP32 flash地址如何重映射到ram?
请问ESP32如何实现Flash到ram重映射这种功能呢?
求助,S32K312上RAM资源不够怎么解决?
Freescale 16位单片机的地址映射
全局变量和成员变量的区别分析

评论