| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
請教一個小問題,結(jié)構(gòu)體定義時這樣子,不知是怎么用的? | 
  
| 作者:liping_88 欄目:DSP技術(shù) | 
struct GPACTRL_BITS { // bits DESCRIPTION Uint16 QUALPRD0:8; // 7:0 QUAL period Uint16 QUALPRD1:8; // 15:8 QUAL period Uint16 QUALPRD2:8; // 23:16 QUAL period Uint16 QUALPRD3:8; // 31:24 QUAL period }; :8這樣表示什么意思? 謝謝。。  | 
  
| 2樓: | >>參與討論 | 
| 作者: liping_88 于 2006/10/23 10:35:00 發(fā)布:
         自己頂一下。 我估計是沒有什么用,只是用于指示說明一下吧。  | 
  |
| 3樓: | >>參與討論 | 
| 作者: szzhengjin 于 2006/10/23 17:00:00 發(fā)布:
         當然有用啦 就是只用其中的8位,若有同別的變量聯(lián)合時,你試一下亂用,肯定讓你的內(nèi)存數(shù)據(jù)亂跳  | 
  |
| 4樓: | >>參與討論 | 
| 作者: tjsheep 于 2006/10/23 18:35:00 發(fā)布:
         占16bit位置,只用8bit ,相當于用align內(nèi)存對齊作用  | 
  |
| 5樓: | >>參與討論 | 
| 作者: zgl7903 于 2006/10/24 7:39:00 發(fā)布:
         位域定義,:8占8個位 但是整個結(jié)構(gòu)體占多少空間,依不同的編譯器有不同的結(jié)果,講求執(zhí)行效率的,每個變量占1個獨立空間,講求存儲密度的,會組合成最小空間的變量。但對C語言訪問都無所謂,這些都有編譯器幫你搞定.  | 
  |
| 6樓: | >>參與討論 | 
| 作者: liping_88 于 2006/10/24 9:51:00 發(fā)布:
         謝謝,我想自己已經(jīng)明白了。 我應該可以這樣認為: 對于整個結(jié)構(gòu)體一共占用了4*8=32個位, 如果我定義一個變量 struct GPACTRL_BITS tTemp; 那么tTemp.QUALPRD0 = 0xaa 就意味著將32位空間的低8位賦值0xaa了。 如果對IO這樣定義再操作就方便了。 例如: struct GPADAT_BITS { // bits DESCRIPTION Uint16 GPIO0:1; // 0 GPIO0 Uint16 GPIO1:1; // 1 GPIO1 Uint16 GPIO2:1; // 2 GPIO2 Uint16 GPIO3:1; // 3 GPIO3 Uint16 GPIO4:1; // 4 GPIO4 Uint16 GPIO5:1; // 5 GPIO5 Uint16 GPIO6:1; // 6 GPIO6 Uint16 GPIO7:1; // 7 GPIO7 Uint16 GPIO8:1; // 8 GPIO8 Uint16 GPIO9:1; // 9 GPIO9 Uint16 GPIO10:1; // 10 GPIO10 Uint16 GPIO11:1; // 11 GPIO11 Uint16 GPIO12:1; // 12 GPIO12 Uint16 GPIO13:1; // 13 GPIO13 Uint16 GPIO14:1; // 14 GPIO14 Uint16 GPIO15:1; // 15 GPIO15 Uint16 GPIO16:1; // 16 GPIO16 Uint16 GPIO17:1; // 17 GPIO17 Uint16 GPIO18:1; // 18 GPIO18 Uint16 GPIO19:1; // 19 GPIO19 Uint16 GPIO20:1; // 20 GPIO20 Uint16 GPIO21:1; // 21 GPIO21 Uint16 GPIO22:1; // 22 GPIO22 Uint16 GPIO23:1; // 23 GPIO23 Uint16 GPIO24:1; // 24 GPIO24 Uint16 GPIO25:1; // 25 GPIO25 Uint16 GPIO26:1; // 26 GPIO26 Uint16 GPIO27:1; // 27 GPIO27 Uint16 GPIO28:1; // 28 GPIO28 Uint16 GPIO29:1; // 29 GPIO29 Uint16 GPIO30:1; // 30 GPIO30 Uint16 GPIO31:1; // 31 GPIO31 }; struct GPADAT_BITS tIOs; tIOs.GPIO31 = 0; 就將IO口的31數(shù)據(jù)位清零了,其它的不會受影響。 謝謝大家的幫助,順便再問一下,結(jié)構(gòu)體這樣訪問會不會增加代碼長度影響速度???  | 
  |
| 7樓: | >>參與討論 | 
| 作者: computer00 于 2006/10/24 9:54:00 發(fā)布:
         一般會生成位操作的代碼,例如與,或等操作。  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |