[問題] BIT FILED的STRUCTURE能超過8BIT嗎?

看板C_and_CPP (C/C++)作者時間10年前 (2015/08/25 20:36), 編輯推噓2(208)
留言10則, 6人參與, 最新討論串1/1
大家好,我在用微控器寫程式,我想請問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

08/25 21:18, , 1F
用微控器寫程式,感覺很厲害的樣子
08/25 21:18, 1F

08/25 21:23, , 2F
應該是寫微控器程式吧
08/25 21:23, 2F

08/25 21:24, , 3F
你做成兩個uint16反而會變成32bits
08/25 21:24, 3F

08/25 21:58, , 4F
好像沒甚麼跨平台的作法. 你可以用 gcc 的 packed 之類的
08/25 21:58, 4F

08/26 00:38, , 5F
用兩個UINT16去做會不行我知道,所以想知道怎麼寫可以不用
08/26 00:38, 5F

08/26 00:38, , 6F
在後端再拼湊這兩個BYTE
08/26 00:38, 6F

08/26 08:54, , 7F
我會加 uint8_t VUV_Reserve : 4;
08/26 08:54, 7F

08/26 15:14, , 8F
前者後者的sizeof對一下 不過在align off下應該是一樣
08/26 15:14, 8F

08/26 15:15, , 9F
另外這個真正的問題會是你的mask寫起來會很痛苦
08/26 15:15, 9F

08/26 15:15, , 10F
明明不用寫mask就能取直 現在都要寫mask去and....
08/26 15:15, 10F
文章代碼(AID): #1Lt65Zy4 (C_and_CPP)
文章代碼(AID): #1Lt65Zy4 (C_and_CPP)