C 以太网传输时端点的变化
我与zedboard和vivado v2017.3合作。我试图在下面的程序中发送由baseaddr_p指向的寄存器(Zynq的PL部分中的slv_reg0)中存储的数据 我使用lwip echo服务器应用程序读取此地址,并通过以太网将其发送到PC 这部分代码是在接收回显请求(telnet)时执行的。在这部分代码中,我还打印了gtkterm中的读取值,以便验证接收到的数据C 以太网传输时端点的变化,c,vivado,zynq,C,Vivado,Zynq,我与zedboard和vivado v2017.3合作。我试图在下面的程序中发送由baseaddr_p指向的寄存器(Zynq的PL部分中的slv_reg0)中存储的数据 我使用lwip echo服务器应用程序读取此地址,并通过以太网将其发送到PC 这部分代码是在接收回显请求(telnet)时执行的。在这部分代码中,我还打印了gtkterm中的读取值,以便验证接收到的数据 void process_echo_request(void *p) { int sd = (int)p; i
void process_echo_request(void *p)
{
int sd = (int)p;
int RECV_BUF_SIZE = 2048;
char recv_buf[RECV_BUF_SIZE];
int n,i,nwrote;
unsigned long my_buffer[10];
i=0;
init_platform();
while(1){
while(i<11)
{
Xuint32 *baseaddr_p = (Xuint32 *)XPAR_MYIP_0_S00_AXI_BASEADDR;
my_buffer[i] = *(baseaddr_p);
xil_printf("0x%08x \n\r", my_buffer[i]);
i++;}
//xil_printf("0x%08x \n\r", my_buffer);
/* handle request */
if ((nwrote = write(sd, my_buffer, sizeof (my_buffer))) < 0) {
xil_printf("%s: ERROR responding to client echo request. received = %d, written = %d\r\n",
__FUNCTION__, n, nwrote);
xil_printf("Closing socket %d\r\n", sd);
break;
}
while (1) {
/* read a max of RECV_BUF_SIZE bytes from socket */
if ((n = read(sd, recv_buf, RECV_BUF_SIZE)) < 0) {
xil_printf("%s: error reading from socket %d, closing socket\r\n", __FUNCTION__, sd);
break;
}
/* break if the recved message = "quit" */
if (!strncmp(recv_buf, "quit", 4))
break;
/* break if client closed connection */
if (n <= 0)
break;
}
}
/* close connection */
close(sd);
vTaskDelete(NULL);
cleanup_platform();
}
void进程请求(void*p)
{
int-sd=(int)p;
int RECV_BUF_SIZE=2048;
char recv_buf[recv_buf_SIZE];
int n,i,nwrite;
无符号长my_缓冲区[10];
i=0;
init_平台();
而(1){
而(i问题在于。当您发送和接收数据时,最好进行主机到网络的转换,反之亦然
有两个POSIXAPI来进行字节顺序转换:和
在接收端,尝试进行网络到主机的字节顺序转换,如果您有权访问发送方,则在发送方执行相反的操作。您的源计算机对整数使用小端内部表示。其xil_printf()
函数解释了这一点,以规范的方式格式化数字以供人类使用。字节交换就在那里,而且是良性的
另一方面,write()
不知道或不关心您传递给它的数据的重要性。它将所有内容简单地视为一个字节序列,并按照它们出现的顺序进行传输。read()
函数按字节通过线路的顺序接收和存储字节。不会发生字节交换
如果您可以依靠接收数据的机器根据相同的数字格式(大小、字节顺序等)解释数据如果没有问题,那么您需要将数据转换为标准格式,以便通过有线传输,或者发送源机器格式的一些指示符,希望接收器能够适当地处理这些指示符
前一种方法更为常见。事实上,这是POSIX定义的角色。如果您没有这些方法,您自己也不难实现它们——最大的技巧(而且没有那么大)是确定本机字节顺序。非常感谢。我现在完全收到了数据。:D感谢您的解释。:D