天线|RF射频
直播中

张润

8年用户 238经验值
私信 关注
[问答]

为什么lwip实现网关得到的数据不对?

小弟正在学习当中,问题多多!还是先上代码:

[C] 纯文本查看 复制代码
static err_t tcp_server_recv(void *arg, struct tcp_PCB *pcb,struct pbuf *p,err_t err)
{
char *data;
char *data_temp;
int a;
int *zz;
int cd=2;
int test[10]={72,79,76,89,32,115,72,105,84,33};
int *point;
u16_t lg=20;
  
a=0X39;
zz=&a;

point=&test[10];


if(p != NULL)
{
  tcp_recved(pcb, p->tot_len);    //?????????¤?? tot_len??tcp?????é???¤??
  /******???????­?ù·???*******************/
  tcp_write(pcb,point,lg,TCP_WRITE_FLAG_COPY);  // payload??TCP?????é??????????      
  tcp_output(pcb);
  pbuf_free(p);            /* ??·???TCP?? */
}
else
{
  tcp_close(pcb);            /* ×÷??TCP·????÷?????÷????±??????????? */
}
err = ERR_OK;
return err;
}
注释部分大家可以略过,在调试过程中使用了tcp调试软件,再来说说现象:
源程序里面是通过上位机向网关板STM32发送数据并直接将数据原样返回:

[C] 纯文本查看 复制代码
tcp_write(pcb,p->payload,p->totlen,TCP_WRITE_FLAG_COPY);    tcp_output(pcb);发送的数据可以原样返回;
例如:发送“stm32”,能返回“stm32”,
先改了这段为:

[C] 纯文本查看 复制代码
tcp_write(pcb,point,lg,TCP_WRITE_FLAG_COPY);      tcp_output(pcb);我希望是不管我用上位机发送什么指令,总能返回数组对应的值;
point是指向我定义的数组,lg为其长度,但是无法正确返回,这里有两个问题:
1、为什么改写程序之前发送的数据能原样返回,改写之后对于单字节数据,例如发送0x30,返回的是ASCII值0?为什么会是ASCII值?
2、改写程序之后发送数组不成功,如果返回数组test[10]={72,79,76,89,32,115,72,105,84,33}的ASCII值也应该是“HOLY SHIT!”
但是若point=&test[10];返回的是0x39的ASCII值9,若point=&test[0],返回的也仅仅是数组中第一个数72对应的SACII值H
若point=&test[1]返回的也仅仅是数组中第二个数79对应的ASCII值O,.........
求大神解惑!感激不尽!

回帖(2)

尹明

2019-8-5 06:23:14
帮顶....
举报

周蓓

2019-8-5 06:30:55
楼主居然将***的头像搬过来了,人才
举报

更多回帖

发帖
×
20
完善资料,
赚取积分