看到一个程序,里面有个if(P),关于if(P)的问题,程序如下:
void transmit_chx(void)
{
static data unsigned char ch0_pt,ch1_pt,ch2_pt,ch3_pt;
unsigned char oddaa,i,*p;
if (ch0_outbuff[0]==0xff)
{
for (i=0;i<COMM_NUM;i++)
{
ch0_pt++;
if (ch0_pt>=COMM_NUM) ch0_pt=0;
p=&ch0_queue[ch0_pt][0];
if (p[0]!=0xff)
{
oddaa = p[0]; // command
oddaa ^= ch0_outbuff[1]=p[1]; // IDH
oddaa ^= ch0_outbuff[2]=p[2]; // IDM
oddaa ^= ch0_outbuff[3]=p[3]; // IDL
oddaa ^= ch0_outbuff[4]=p[4]; // data1
oddaa ^= ch0_outbuff[5]=p[5]&0x7f; // data2
ACC = oddaa;
if (P)
{
ch0_outbuff[5]|=0x80;
}
ch0_outbuff[0]=p[0];
if (p[0]==0x10) p[0]= 0xff;
if (p[0]==0x18)
{
szcan_t_ch0++;
if (szcan_t_ch0>5)
{
szcan_t_ch0=0;
p[0]= 0xff;
}
}
break;
}
}
}
问题1
关于oddaa,把一个数组第一个数辅给oddaa,然后不断异或,最后在和0x7f与,这样计算下来的值是校验的吗?
问题2
如果是校验,那么在哪里判断是否正确吗?是后面if(P)吗?
问题3
如果是if(P)那么if语句判断的是什么,是p指向的数组的第一个数吗?还是P指PSW ?
最好能讲下这段程序是怎么执行的,谢谢!!!!!!!!!!!!!!!!!
|