作者qeagle ()
看板C_and_CPP
標題[問題] BIT FILED的STRUCTURE能超過8BIT嗎?
時間Tue Aug 25 20:36:49 2015
大家好,我在用微控器寫程式,我想請問BIT FILED的
UNION和STRUCTURE宣告,是否有辦法直接處理超過8位元的變數
比如下方的STURCTURE定義:
有沒有辦法將
uint8_t VUV_8LSB : 8;
uint8_t VUV_4MSB : 4;
uint8_t VOV_4LSB : 4;
uint8_t VOV_8MSB : 8;
直接做成
uint16_t VUV :12;
uint16_t VOV :12;
而不會浪費任何空間呢?
typedef struct cfgw_tag {
union {
struct {
uint8_t CFGR0;
uint8_t CFGR1;
uint8_t CFGR2;
uint8_t CFGR3;
uint8_t CFGR4;
uint8_t CFGR5;
};
struct {
uint8_t ADCOPT :1;
uint8_t SWTRD :1;
uint8_t REFON :1;
uint8_t GPIO :5;
uint8_t VUV_8LSB : 8;
uint8_t VUV_4MSB : 4;
uint8_t VOV_4LSB : 4;
uint8_t VOV_8MSB : 8;
uint8_t DCC_8LSB : 8;
uint8_t DCC_4MSB : 4;
uint8_t DCTO : 4;
};
};
}CFG_WRITE;
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.61.219
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1440506211.A.F04.html
推 stupid0319: 用微控器寫程式,感覺很厲害的樣子 08/25 21:18
→ withoutshine: 應該是寫微控器程式吧 08/25 21:23
→ withoutshine: 你做成兩個uint16反而會變成32bits 08/25 21:24
→ Feis: 好像沒甚麼跨平台的作法. 你可以用 gcc 的 packed 之類的 08/25 21:58
→ qeagle: 用兩個UINT16去做會不行我知道,所以想知道怎麼寫可以不用 08/26 00:38
→ qeagle: 在後端再拼湊這兩個BYTE 08/26 00:38
→ EdisonX: 我會加 uint8_t VUV_Reserve : 4; 08/26 08:54
推 Killercat: 前者後者的sizeof對一下 不過在align off下應該是一樣 08/26 15:14
→ Killercat: 另外這個真正的問題會是你的mask寫起來會很痛苦 08/26 15:15
→ Killercat: 明明不用寫mask就能取直 現在都要寫mask去and.... 08/26 15:15