小弟正在学习当中,问题多多!还是先上代码:
[C]
纯文本查看 复制代码
sta
tic 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,.........
求大神解惑!感激不尽!