問:我想訪問某個字節中的單個位,但是當我嘗試用絕對變量結構定義一個位變量時,例如:
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文章
1369瀏覽量
115035 -
編譯器
+關注
關注
1文章
1642瀏覽量
49295 -
變量
+關注
關注
0文章
613瀏覽量
28467
發布評論請先 登錄
相關推薦
stm32編程的話,變量定義成8位好還是16位號?
芯海通用 MCU 應用筆記:在 MDK 開發環境下代碼重定向到 RAM 執行的幾種方法
請問ESP32如何實現Flash到ram重映射這種功能呢?
如何將變量定義在外部RAM呢?
ESP32 flash地址如何重映射到ram?
請問ESP32如何實現Flash到ram重映射這種功能呢?
求助,S32K312上RAM資源不夠怎么解決?
Freescale 16位單片機的地址映射
全局變量和成員變量的區別分析
![全局<b class='flag-5'>變量</b>和成員<b class='flag-5'>變量</b>的區別分析](https://file1.elecfans.com//web2/M00/A7/11/wKgZomUMQimAGK-NAAAzhuzl1S4495.png)
評論