| 
 
新手上路 
 
	积分25金钱25 注册时间2016-8-24在线时间65 小时 | 
 
5金钱 
| 代码用的是原子精英版RAW-TCP的例程修改的,采集一个通道的模拟量,边采集,边发送,上位机是用C#编写的,通讯调试的时候显示为筹码。求大神指导,下面贴上代码。发送部分的代码,也就是lwIP tcp_poll的回调函数 //lwIP tcp_poll的回调函数
 err_t tcp_client_poll(void *arg, struct tcp_pcb *tpcb)
 {
 err_t ret_err;
 struct tcp_client_struct *es;
 es=(struct tcp_client_struct*)arg;
 if(es!=NULL)  //连接处于空闲可以发送数据
 {
 if(tcp_client_flag&(1<<7))        //判断是否有数据要发送
 {
 int i;
 for(i=0;i<K;i++)
 {
 adcvalude=Get_Adc(ADC_Channel_10);
 es->p=pbuf_alloc(PBUF_TRANSPORT, sizeof(adcvalude),PBUF_POOL);        //申请内存
 pbuf_take(es->p,(int*)adcvalude,sizeof(adcvalude));        //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中
 tcp_client_senddata(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去
 }
 tcp_client_flag&=~(1<<7);        //清除数据发送标志
 if(es->p)pbuf_free(es->p);        //释放内存
 }else if(es->state==ES_TCPCLIENT_CLOSING)
 {
 tcp_client_connection_close(tpcb,es);//关闭TCP连接
 }
 ret_err=ERR_OK;
 }else
 {
 tcp_abort(tpcb);//终止连接,删除pcb控制块
 ret_err=ERR_ABRT;
 }
 return ret_err;
 }
 
 
 
 这个是我上位机C#的接收部分的代码
 void TSReceive()
 {
 Control.CheckForIllegalCrossThreadCalls = false;
 aimSocket = mySocket.Accept();//服务端监听到的Socket为服务端发送数据的目标socket
 byte[] buffer = new byte[1024];
 while (true)
 {
 try
 {
 int r = aimSocket.Receive(buffer);//接收到监听的Socket的数据
 if (r == 0)
 {
 MessageBox.Show("连接断开");
 break;
 }
 
 for (int i = 0; i < buffsize; i++)
 {
 //char srdsdf = Encoding.Default.GetChars(buffer, 0, r);
 string strRec=Encoding.ASCII.GetString(buffer,0,r);
 string strRec1 = Encoding.Unicode.GetString(buffer, 0, r);
 string strRec2 = Encoding.UTF8.GetString(buffer, 0, r);
 string strRec3 = Encoding.Default.GetString(buffer, 0, r);//原代码转换形式
 string ss = aimSocket.RemoteEndPoint.ToString() + ":" + strRec + "\r\n";
 
 }
 
 int j = 0;
 }
 catch
 { }
 }
 }
 
 
 
 求教大神,我该怎么弄,调了很一天多了,试了很多种试,上下位机都改过,还是不行。
 
 
 | 
 
最佳答案
查看完整内容[请看2#楼] 你先发送10个字节,比如1~10,然后上位机解析。能实现显示1~10,再去搞你的传输ADC值。  注意编码的不同,导致的数据差异,就可以解决你的问题。。 |