欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: keil位變量能不能定義數據? [打印本頁]

作者: hjx5548    時間: 2025-10-30 20:21
標題: keil位變量能不能定義數據?
// 狀態標志位,記錄每個通道是否已經觸發延時
bit adc_triggered[ADC_CHANNELS] = {0};
unsigned char adc_triggered[ADC_CHANNELS] = {0};
第一句位變量定義,是否可以用下面的代替,功能一樣嗎?
作者: npn    時間: 2025-10-30 21:54
keil不支持位變量,51單片機沒有間接位尋址指令,用移位邏輯運算代替。
作者: hjx5548    時間: 2025-10-31 04:03
npn 發表于 2025-10-30 21:54
keil不支持位變量,51單片機沒有間接位尋址指令,用移位邏輯運算代替。

上面這句應該怎樣修改?
作者: devcang    時間: 2025-10-31 08:54

第一行,不可以,編譯不通過
第二行,可以

作者: Similarv    時間: 2025-10-31 12:04
可以試試用位結構體+聯合體吧。
/* 標志結合體 */
typedef union{
        unsigned char all;
        struct{
                unsigned char CH0: 1;
                unsigned char CH1: 1;
                unsigned char CH2: 1;
                unsigned char CH3: 1;
                unsigned char CH4: 1;
                unsigned char NO_USE:3;
        }part;
}UNION_ADC_CHANNEL;
UNION_ADC_CHANNEL adc_triggered;  //用于表示當前的按鍵情況
------------------------------------
此后,可以用adc_triggered.all = 0一鍵清空所有標志。
或者用adc_triggered.part.CH1 = 1單獨設置某個標志位。

作者: 源洋川    時間: 2025-11-1 01:08
// 位數組方式 - 節省內存
bit adc_triggered[ADC_CHANNELS] = {0};

// 字節數組方式 - 使用更多內存,但操作更直觀
unsigned char adc_triggered[ADC_CHANNELS] = {0};

// 使用時的區別:
// 位數組
adc_triggered[0] = 1;        // 直接賦值
if(adc_triggered[0]) {...}   // 直接判斷

// 字節數組  
adc_triggered[0] = 1;        // 同樣賦值
if(adc_triggered[0] != 0) {...} // 建議明確判斷
作者: keemee    時間: 2025-11-1 03:53
好像C51不能定義位變量數組,因為數組的本質是連續存儲并通過指針進行線性間接變址訪問,但是51機器指令碼對于內存的20H到2F的位存儲區,無法利用R0、R1寄存器間接尋址方式訪問,所以無法定義“位類型”的數組
作者: keemee    時間: 2025-11-1 03:54
源洋川 發表于 2025-11-1 01:08
// 位數組方式 - 節省內存
bit adc_triggered[ADC_CHANNELS] = {0};

你真的在C51的編譯環境下定義并通過了位數組,我要試一試
作者: rundstedt    時間: 2025-11-1 18:09
如果這么定義:bit adc_triggered[ADC_CHANNELS]
那么如果x是個變量,無法對adc_triggered[x]進行讀寫,從機器碼層面上就不存在這種操作,想都不用想這種定義就是錯的。
作者: wufa1986    時間: 2025-11-3 08:24
目前的單片機都不缺RAM了,沒必要一定用bit處理問題,反正我做項目是從來不定義位變量
作者: hhh402    時間: 2025-11-3 22:25
keil支持位變量,但是不支持位數組。要使用位變量只能夠一個個定義不可用數組。
作者: ozq123    時間: 2025-11-4 14:57
能替代,核心功能(記錄通道是否觸發的 0/1 標志)一致,但有兩點關鍵區別: 內存:bit 數組每個元素占 1 位,更省空間;unsigned char 數組每個元素占 1 字節,耗內存更多。 兼容性:bit 是編譯器擴展類型(如 C51),移植性差;unsigned char 是標準 C 類型,所有編譯器都支持。
作者: Hswxsr    時間: 2025-11-4 15:27
不能替代,本身就是錯誤的
作者: rundstedt    時間: 2025-11-12 16:52
ozq123 發表于 2025-11-4 14:57
能替代,核心功能(記錄通道是否觸發的 0/1 標志)一致,但有兩點關鍵區別: 內存:bit 數組每個元素占 1  ...

你定義一個“bit 數組”出來讓大家也樂一樂。
作者: csmyldl    時間: 2025-11-12 21:10
在匯編語言中可以定義的,學會匯編與C語言混編程,可以輕松解決
如:
data EQU 20H          ;必須具有位尋址的存儲器
x1 EQU data^0
x2 EQU data^1
x3 EQU data^2
x4 EQU data^3
x5 EQU data^4
x6 EQU data^5
x7 EQU data^6
x8 EQU data^7

作者: tyrl800    時間: 2025-11-16 19:50
unsigned char  bdata  a; a相當于位數組
作者: Hephaestus    時間: 2025-11-18 05:17
csmyldl 發表于 2025-11-12 21:10
在匯編語言中可以定義的,學會匯編與C語言混編程,可以輕松解決
如:
data EQU 20H          ;必須具有位 ...

規范的寫法第一個equ應該是bdata,后面的8個equ是bit,這樣匯編才是relocatable,你這種寫法如果用BL51連接就全亂套了。
作者: coody_sz    時間: 2025-11-18 18:07
不能,KEIL不支持位數組。
作者: naoya    時間: 2025-11-18 23:11

keil支持位變量,但是不支持位數組。要使用位變量只能夠一個個定義不可用數組。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1