1.問題描述
有如下函式
int my_read_reg(euint16 slot, euint16 chip, euint16 reg, euint16 *pvalue)
在vxwork shell 上敲入如下命令
->buf=malloc(2)
->my_read_reg 0,0,0x44, &buf
buf 的值是0
-> my_lowlevel_read 0,0,0x44, &buf
buf的值是0x23.
2.問題原因
在該系統中,採用的是大端序。
dwvalue是32位的,而my_lowlevel_read最後乙個引數是 16bit暫存器的指標。
my_lowlevel_read 函式執行之後,dwvalue的值在記憶體中是如下儲存的。
記憶體位址 ==0==1==2==3==
dwvalue值 00 23 00 00
這樣 dwvalue & 0x7ff = 0
3.原理解釋
在執行my_lowlevel_read函式時,32bit暫存器的指標被強制轉換成 16bit暫存器的指標。
轉換後,指標指向了 ==0==1==這塊記憶體,在該函式執行完成之後,暫存器中的值自然就儲存在了 ==0==1==這塊記憶體裡面。
當函式出來以後,dwvalue實際上變成了0x230000.
大端序和小端序
一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...
大端序和小端序
在socket程式設計的時候會遇到端序的問題。位元組序和程式語言無關,和硬體的儲存方式有關。intel的cpu使用小端序,而網路上傳輸資料使用大端序。在我的理解中,大端序和小端序並沒有哪種更好,只是儲存的方式不同而已。記憶體中我們只關心1byte,位址的基本單位也是byte。位元組序不關心1個byt...
大端序和小端序
一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...