[求助] 帮忙计算一个宏的值

zheng522   2012-1-13 18:20 楼主

#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr))

有一个数组buf[20] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x67}

在IAR for MSP430 5.30中计算:LD_WORD(buf[11])应该等于多少,用什么办法可以计算出来

回复评论 (3)

天啊,这也忒绕!
强者为尊,弱者,死无葬身之地
点赞  2012-1-13 22:56
然后,大哥,你是不是把WORD这个宏整给我们?
那个BYTE是不是 重定义char呢?
强者为尊,弱者,死无葬身之地
点赞  2012-1-13 23:02
这个WORD,,,敢情是int或者ushort?
嗯,int是四个字节,两个字,一个双字。
那应该WORD是int的重定义咯?

如果是这样的话,那我猜测,这个宏是这样的,首先把它一层一层展开

(WORD)(  (*(WORD*))(BYTE *)(ptr)  )
ptr是参数,实际上应是要找的一个地址。
这里绕了很多弯,首先它找到ptr这个地址,那个BYTE *,应该是因为那个buffer是char型数组。
在这个基础上,我们再以ptr这个地址指向的内容为地址,再去取那个地址的内容,不过,这次是WORD型指针了。

绕了这么多圈,感觉这个东西很像51里的 寄存器寻址,而且还是饶了两层的寄存器寻址。
强者为尊,弱者,死无葬身之地
点赞  2012-1-13 23:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复