unsigned short dnetlen = ((unsigned short*)pBuf)[6]; while (i <(dnetlen*2+18))//i是字节数,18是报头+报尾 { int si = recv( s, (void **)&pdbuf, 3072*sizeof(char), 0 ); memcpy( pBuf+i, pdbuf, si ); i = i+ si; } bufAck[2]=pBuf[2]; SysPara_Init((Uint16 *)(pBuf+464+14));//意思是这里只要7个数据 Temper_sensor_Init(); unsigned int LEN1=236; unsigned int a=0,b=0; //pass the data to DATA[800] ,DATA[800] is sync data. while(LEN1>0) // pbuf high 8 bit is 0, low 8bit is data. { DATA[a]=pBuf[14+b];//DDS PARAMETER b=b+2; a++; LEN1--; } upp(); CS_INIT(); send(s,bufAck,18*sizeof(char),0); break;请把每段代码都详细分析一下
时间: 2024-04-27 15:21:22 浏览: 133
get_unsigned_short.rar_short
1. `unsigned short dnetlen = ((unsigned short*)pBuf)[6];`
这行代码的目的是从数据包中获取数据长度,存储在变量dnetlen中。`pBuf`是指向数据包的指针,`(unsigned short*)pBuf`将指针类型转换为unsigned short类型的指针,然后通过索引[6]获取第7个16位数据,即数据包的长度。
2. `while (i <(dnetlen*2+18))`
这个while循环的目的是接收网络数据包中的所有数据。dnetlen是数据包的长度,乘以2是因为每个数据是16位的,加上18是因为数据包头和尾共18个字节。i是接收到的字节数,当i小于数据包长度加上18时,循环继续接收数据。
3. `int si = recv( s, (void **)&pdbuf, 3072*sizeof(char), 0 );`
这行代码的目的是从网络套接字s中接收数据,存储在缓冲区pdbuf中。`3072*sizeof(char)`表示最多接收3072个字节的数据。`&pdbuf`是指向指针的指针,因为recv函数需要修改指针的值,所以需要传入指针的地址。
4. `memcpy( pBuf+i, pdbuf, si );`
这行代码的目的是将接收到的数据拷贝到pBuf指向的缓冲区中。`i`是接收到的字节数,`si`是本次接收到的字节数,因此需要将数据拷贝到pBuf+i的位置。
5. `bufAck[2]=pBuf[2];`
这行代码的目的是将数据包的第3个字节赋值给bufAck的第3个字节。具体用途不明确。
6. `SysPara_Init((Uint16 *)(pBuf+464+14));`
这行代码的目的是初始化系统参数。`(Uint16 *)(pBuf+464+14)`表示将pBuf指针加上464+14个字节,然后将结果强制转换为Uint16类型的指针,作为参数传递给SysPara_Init函数。
7. `Temper_sensor_Init();`
这行代码的目的是初始化温度传感器。具体用途不明确。
8. `while(LEN1>0)`
这个while循环的目的是将数据传递给DATA数组。LEN1是要传递的数据长度,a和b是循环计数器。每次循环将pBuf中的数据拷贝到DATA数组中,然后将a和b的值加1。
9. `upp();`
这行代码的目的不明确。可能是调用upp函数进行其他处理。
10. `CS_INIT();`
这行代码的目的是初始化某些东西,具体用途不明确。
11. `send(s,bufAck,18*sizeof(char),0);`
这行代码的目的是向客户端发送一个确认消息。`bufAck`是存储确认消息的缓冲区,18表示数据长度,sizeof(char)表示每个字节占用的字节数,0表示发送标志位。
阅读全文