音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

#define PACK_STRUCT_FIELD(x)  x  __attribute__((packed))

作者:modaming 欄目:嵌入式系統(tǒng)
#define PACK_STRUCT_FIELD(x)  x  __attribute__((packed))
#define PACK_STRUCT_FIELD(x)  x  __attribute__((packed))
無意中看到的,這個(gè)宏怎么解釋阿?望大俠指教。

2樓: >>參與討論
gdtyy
定義編譯器字節(jié)對(duì)齊方式
gcc中,在某個(gè)變量x后使用“__attribute__((packed))”可以通知編譯器保證字節(jié)對(duì)齊。
在lwip中包是存儲(chǔ)在結(jié)構(gòu)體里,而結(jié)構(gòu)體及其成員可能存在字節(jié)不對(duì)齊現(xiàn)象,32位/16位CPU不能正確讀寫這類數(shù)據(jù),導(dǎo)致數(shù)據(jù)包操作錯(cuò)誤。

如下圖:32位系統(tǒng)中,x為3字節(jié),y為4字節(jié),z為1字節(jié)。系統(tǒng)將不能正確讀寫y。

  31            8 7    0
  ----------------------
  |      x       |  y  |
  ----------------------
  |      y       |  z  |
  ----------------------

改成下圖才可以正確訪問:

  31            8 7    0
  ----------------------
  |     |      x       |
  ----------------------
  |          y         |
  ----------------------
  |              |  z  |
  ----------------------
可見空間被浪費(fèi)了,但只有這樣x、y、z才可以直接訪問,否則,你必須讀兩次內(nèi)存(每次32位),再移位操作跨邊界的y,才能正確讀出y。
編譯器缺省時(shí)為了節(jié)約內(nèi)存耗費(fèi),將按字節(jié)緊湊排列變量,用attribute關(guān)鍵字指出packed,就是通知編譯器按字獨(dú)立分配每個(gè)變量的內(nèi)存空間。

編譯器加優(yōu)化可以將上圖改變?nèi)缦拢?br>
  31            8 7    0
  ----------------------
  |  z   |      x      |
  ----------------------
  |         y          |
  ----------------------
這樣既保證字節(jié)對(duì)齊,又保證節(jié)約內(nèi)存。

不同編譯器的語(yǔ)法不同,你需要根據(jù)特定情況修改PACK_STRUCT_FIELD(x)宏。
例如:(gcc編譯器)

struct eth_addr {
    u8_t addr[6] __attribute__((packed));
} __attribute__((packed));

確保eth_addr結(jié)構(gòu)體及其成員addr字節(jié)對(duì)齊。

3樓: >>參與討論
modaming
其中的x意思是什么阿?
多些耐心地講了這么多,但是其中的x意思是什么阿?

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
有誰(shuí)用過EPSON的M-U111S打印頭嗎?
ucos2下實(shí)現(xiàn)message queue消息機(jī)制?
用keil編譯UCOSII的問題
急救急救 預(yù)尋好心人告知有關(guān)5116芯片資料
關(guān)于字庫(kù)!
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)