嗨考虑这段
代码:
uint16_t dest_pid;
uint8_t *p;
pf->dest_pid = p[0] + (p[1] << 8) //(p[1] << 8) equals 0 right?
此代码是嵌入式操作系统驱动程序的一部分.
一些想法可能是该声明背后的想法?或者可能是我遗失了一些必要的东西?
首先:pf之后的dest_pid是结构的一部分,我认为它是另一个变量,然后是uint16_t dest_pid;
第二:p是指向uint8_t的指针,当你执行(p [1]<< 8)时,你将指针内部的内容移动8,例如,如果移位后p [1] = 0xE5将是0xE500.请记住,将结果放在dest_pid中,这是一个2字节的变量. 最后一行的转换最有可能采用pid的低字节(不太重要)并将其添加到pid的高字节(移位8)并将其放入pf-> dest_pid中,你可能会想到为什么他没有从一开始就发送2个字节,原因可能是因为他从一个总线上获取它,每个单位时间(周期)只发送一个字节.