求助,高手请进。。

wlh154306560 2011-11-25 02:35:43
#define ENDIAN_SWAP_WORD(x) (((x)>>8) | ((x)<<8))

typedef struct {
BYTE tRst; //5 bits
BYTE tRel; //7 bits
BYTE tSlw; //slew3[5:4], slew2[3:2], slew1[1:0]
BYTE tMsc; //pkdelay[4:3], pknum[2:1], autosw[0]
WORD vRst; //setting for V reset
WORD vRel; //setting for V release
WORD vBias; //setting for V bias
} SP_MR3001DESC;

BOOL spBEControl(BYTE cmd, VOID *pIn, BYTE flags) {
//According to different command, make different package!
BYTE size;
INT i;
BOOL res;
BYTE bMail[MAIL_SIZE];

res = SP_FALSE;

bMail[0] = OSDCMD_CONTROL;
bMail[1] = cmd;

switch(cmd) {
case SPCTLCMD_SETMR3001TIMING:
if (pIn) {
SP_MR3001DESC mr3001;

mr3001 = *(SP_MR3001DESC *)pIn;
mr3001.vBias = ENDIAN_SWAP_WORD(mr3001.vBias);
mr3001.vRst = ENDIAN_SWAP_WORD(mr3001.vRst);
mr3001.vRel = ENDIAN_SWAP_WORD(mr3001.vRel);

bMail[2] = flags;
*(SP_MR3001DESC *)&bMail[3] = mr3001;
size = 3 + sizeof(SP_MR3001DESC);

for (i = 0; i < MAIL_TRYS; i ++) { //try 3 times
res = halBESendMail(bMail, size);
if (res == SP_TRUE) break;
#if DEBUG_LEVEL >= 1
else printf("Send6 Mail error!");
#endif
}
return res;
}
break;

}

return res;
}
在调用涵数的SPCTLCMD_SETMR3001TIMING这个case时,bMail[3]的值为多少?
SP_MR3001DESC mr3001;

mr3001 = *(SP_MR3001DESC *)pIn;
mr3001.vBias = ENDIAN_SWAP_WORD(mr3001.vBias);
mr3001.vRst = ENDIAN_SWAP_WORD(mr3001.vRst);
mr3001.vRel = ENDIAN_SWAP_WORD(mr3001.vRel);

这个部分看不太明白,请各位指教。。
...全文
68 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-11-25
  • 打赏
  • 举报
回复
size = 3 + sizeof(SP_MR3001DESC);
res = halBESendMail(bMail, size);

看到这两行代码,更加清晰了,实际的mail大小就是由3字节的控制+SP_MR3001DESC构成的,拼接完成后发送出去。
qq120848369 2011-11-25
  • 打赏
  • 举报
回复
*(SP_MR3001DESC *)&bMail[3] = mr3001;

这是把mr3001结构体放到bMail+3这个地址开始的内存里,你看:

BYTE bMail[MAIL_SIZE];

MAIL_SIZE就是MAIL的大小,前3字节:
bMail[0] = OSDCMD_CONTROL;
bMail[1] = cmd;
bMail[2] = flags;
存储一些控制字段,接下来的sizeof(mr3001)个字节就是来存储这个mr3001了。

这里是利用了结构体的赋值,其实你完全可以memcpy(bMail+3,&mr3001,sizeof(mr3001))
qq120848369 2011-11-25
  • 打赏
  • 举报
回复
这段代码就是颠倒各个WORD成员的字节序.

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧