看板 C_and_CPP 關於我們 聯絡資訊
大家好,我在用微控器寫程式,我想請問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