問:我想訪問某個字節中的單個位,但是當我嘗試用絕對變量結構定義一個位變量時,例如:
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文章
1399瀏覽量
120549 -
編譯器
+關注
關注
1文章
1672瀏覽量
51598 -
變量
+關注
關注
0文章
616瀏覽量
29505
發布評論請先 登錄
相關推薦
熱點推薦
stm32編程的話,變量定義成8位好還是16位號?
比如需要一個變量,8位足夠,那么定義的時候是定義成u8?u16?u32?
“32位在某些情況下需要對齊,對datafalsh讀寫時地址要是4的整數倍
編程方面如果RAM足夠考慮
發表于 05-14 07:29
芯海通用 MCU 應用筆記:在 MDK 開發環境下代碼重定向到 RAM 執行的幾種方法
空間并寫入新的代碼。此外還具備執行效率高,壽命長優點。
本文檔介紹和說明在 MDK 開發環境下將代碼重定向到 RAM 中執行的方法。本文檔使用開發環境位 keil UVision,版
發表于 05-16 11:58
請問ESP32如何實現Flash到ram重映射這種功能呢?
拷貝到對應ram內存中,當在線標定時,會直接操作ram中相應的地址,以實現參數在線修改。
請問ESP32如何實現Flash到ram重
發表于 06-14 06:31
如何將變量定義在外部RAM呢?
隨著單片機功能的拓展,協議棧or算法因此變得越來越龐大,此時內部RAM是不能滿足需求了,必須將變量定義在外部RAM(如SDSRAM)。那么如何將變量定義在外部
發表于 01-21 08:28
ESP32 flash地址如何重映射到ram?
拷貝到對應ram內存中,當在線標定時,會直接操作ram中相應的地址,以實現參數在線修改。請問ESP32如何實現Flash到ram重
發表于 02-13 08:42
請問ESP32如何實現Flash到ram重映射這種功能呢?
拷貝到對應ram內存中,當在線標定時,會直接操作ram中相應的地址,以實現參數在線修改。請問ESP32如何實現Flash到ram重
發表于 03-06 08:35
求助,S32K312上RAM資源不夠怎么解決?
如果S32K312運行autosar RAM資源不夠用導致程序死機,請問有什么好的解決辦法嗎?我們可以想到一些方法1、直接定義函數和變量給TCM執行。這涉及到修改啟動文件和重新
發表于 03-15 06:24
Freescale 16位單片機的地址映射
原文鏈接:freescale 16位單片機的地址映射--(1)前言 freescale 16位單片機的地址映射--(2)飛思卡爾16位單片機
發表于 11-24 07:43
?1482次閱讀
全局變量和成員變量的區別分析
成員變量是指定維度的成員變量,用于標識某個維度成員。簡介由 Analysis Services 內部使用的值,以標識某個維度成員。MemberKeyColumn 屬性指定維度的成員
發表于 12-11 13:50
?7302次閱讀
把指定代碼、常數或變量到某個特定地址的一個方法
問:如何指定代碼、常數或變量到某個特定的地址? 答:使用“#pragma psect”偽指令來把代碼、常數或變量放到你定制的psect。于是你就可以使用鏈接器選項來把這個定制的psect放到
映射位到某個RAM變量的方法
評論