問(wèn):我想訪問(wèn)某個(gè)字節(jié)中的單個(gè)位,但是當(dāng)我嘗試用絕對(duì)變量結(jié)構(gòu)定義一個(gè)位變量時(shí),例如:
static bit bitvar @ ((unsigned)&bytevar)*8+0;
我得到一個(gè)編譯錯(cuò)誤。我該怎么做?
答:簡(jiǎn)單地回答是,你不能這么做。使用@定義絕對(duì)變量結(jié)構(gòu),在編譯時(shí)需要一個(gè)已知地址。(譯者注:編譯器編譯到這一行時(shí),bytevar的地址并不確定)
更詳細(xì)的(可能也是更有用的)回答是,這要看具體你是要做什么。你可能會(huì)在下面的一些簡(jiǎn)單的宏定義中找到你所需要的東西:
#define testbit(var, bit) ((var) & (1 <<(bit)))
#define setbit(var, bit) ((var) |= (1 << (bit)))
#define clrbit(var, bit) ((var) &= ~(1 << (bit)))
或者你可以定義一個(gè)聯(lián)合union,例如:
union both {
unsigned char byte;
struct {
unsigned bit0:1; // etc.
} bits;
} var;
于是你就可以直接引用var.byte或者var.bits.bit0。
-
RAM
+關(guān)注
關(guān)注
8文章
1384瀏覽量
116243 -
編譯器
+關(guān)注
關(guān)注
1文章
1651瀏覽量
49712 -
變量
+關(guān)注
關(guān)注
0文章
614瀏覽量
28740
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
stm32編程的話,變量定義成8位好還是16位號(hào)?
芯海通用 MCU 應(yīng)用筆記:在 MDK 開(kāi)發(fā)環(huán)境下代碼重定向到 RAM 執(zhí)行的幾種方法
請(qǐng)問(wèn)ESP32如何實(shí)現(xiàn)Flash到ram重映射這種功能呢?
如何將變量定義在外部RAM呢?
ESP32 flash地址如何重映射到ram?
請(qǐng)問(wèn)ESP32如何實(shí)現(xiàn)Flash到ram重映射這種功能呢?
求助,S32K312上RAM資源不夠怎么解決?
Freescale 16位單片機(jī)的地址映射
全局變量和成員變量的區(qū)別分析

DSP從FLASH到RAM的方法詳細(xì)資料說(shuō)明

STM32位帶引申的指針變量問(wèn)題

把指定代碼、常數(shù)或變量到某個(gè)特定地址的一個(gè)方法
TSMaster 信號(hào)映射的配置方法

評(píng)論