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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1104|回復: 19
打印 上一主題 下一主題
收起左側

keil位變量能不能定義數據?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:72649 發表于 2025-10-30 20:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
// 狀態標志位,記錄每個通道是否已經觸發延時
bit adc_triggered[ADC_CHANNELS] = {0};
unsigned char adc_triggered[ADC_CHANNELS] = {0};
第一句位變量定義,是否可以用下面的代替,功能一樣嗎?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:57657 發表于 2025-10-30 21:54 | 只看該作者
keil不支持位變量,51單片機沒有間接位尋址指令,用移位邏輯運算代替。
回復

使用道具 舉報

板凳
ID:72649 發表于 2025-10-31 04:03 來自觸屏版 | 只看該作者
npn 發表于 2025-10-30 21:54
keil不支持位變量,51單片機沒有間接位尋址指令,用移位邏輯運算代替。

上面這句應該怎樣修改?
回復

使用道具 舉報

地板
ID:277550 發表于 2025-10-31 08:54 | 只看該作者

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

使用道具 舉報

5#
ID:476527 發表于 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單獨設置某個標志位。
回復

使用道具 舉報

6#
ID:1138150 發表于 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) {...} // 建議明確判斷
回復

使用道具 舉報

7#
ID:1110477 發表于 2025-11-1 03:53 | 只看該作者
好像C51不能定義位變量數組,因為數組的本質是連續存儲并通過指針進行線性間接變址訪問,但是51機器指令碼對于內存的20H到2F的位存儲區,無法利用R0、R1寄存器間接尋址方式訪問,所以無法定義“位類型”的數組
回復

使用道具 舉報

8#
ID:1110477 發表于 2025-11-1 03:54 | 只看該作者
源洋川 發表于 2025-11-1 01:08
// 位數組方式 - 節省內存
bit adc_triggered[ADC_CHANNELS] = {0};

你真的在C51的編譯環境下定義并通過了位數組,我要試一試
回復

使用道具 舉報

9#
ID:879809 發表于 2025-11-1 18:09 | 只看該作者
如果這么定義:bit adc_triggered[ADC_CHANNELS]
那么如果x是個變量,無法對adc_triggered[x]進行讀寫,從機器碼層面上就不存在這種操作,想都不用想這種定義就是錯的。
回復

使用道具 舉報

10#
ID:879348 發表于 2025-11-3 08:24 | 只看該作者
目前的單片機都不缺RAM了,沒必要一定用bit處理問題,反正我做項目是從來不定義位變量
回復

使用道具 舉報

11#
ID:491577 發表于 2025-11-3 22:25 | 只看該作者
keil支持位變量,但是不支持位數組。要使用位變量只能夠一個個定義不可用數組。
回復

使用道具 舉報

12#
ID:1162267 發表于 2025-11-4 14:57 | 只看該作者
能替代,核心功能(記錄通道是否觸發的 0/1 標志)一致,但有兩點關鍵區別: 內存:bit 數組每個元素占 1 位,更省空間;unsigned char 數組每個元素占 1 字節,耗內存更多。 兼容性:bit 是編譯器擴展類型(如 C51),移植性差;unsigned char 是標準 C 類型,所有編譯器都支持。
回復

使用道具 舉報

13#
ID:1146065 發表于 2025-11-4 15:27 | 只看該作者
不能替代,本身就是錯誤的
回復

使用道具 舉報

14#
ID:879809 發表于 2025-11-12 16:52 | 只看該作者
ozq123 發表于 2025-11-4 14:57
能替代,核心功能(記錄通道是否觸發的 0/1 標志)一致,但有兩點關鍵區別: 內存:bit 數組每個元素占 1  ...

你定義一個“bit 數組”出來讓大家也樂一樂。
回復

使用道具 舉報

15#
ID:235200 發表于 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
回復

使用道具 舉報

16#
ID:275826 發表于 2025-11-16 19:50 | 只看該作者
unsigned char  bdata  a; a相當于位數組
回復

使用道具 舉報

17#
ID:883242 發表于 2025-11-18 05:17 | 只看該作者
csmyldl 發表于 2025-11-12 21:10
在匯編語言中可以定義的,學會匯編與C語言混編程,可以輕松解決
如:
data EQU 20H          ;必須具有位 ...

規范的寫法第一個equ應該是bdata,后面的8個equ是bit,這樣匯編才是relocatable,你這種寫法如果用BL51連接就全亂套了。
回復

使用道具 舉報

18#
ID:1034262 發表于 2025-11-18 18:07 | 只看該作者
不能,KEIL不支持位數組。
回復

使用道具 舉報

19#
ID:1163294 發表于 2025-11-18 23:11 | 只看該作者

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表