netconn TCPclient换个写法后就不行了。。。

2019-08-19 18:29发布

下面这个写法经过测试后是可行的。。。
写法一:
#include "tcp_client_demo.h"
#include "lwip/opt.h"
#include "lwip_comm.h"
#include "lwip/lwip_sys.h"
#include "lwip/api.h"
#include "includes.h"
#include "key.h"
#include "ADC.h"
#include "led.h"

//////////////////////////////////////////////////////////////////////////////////           

struct netconn *tcp_clientconn;                                        //TCP CLIENTíøÂçᬽó½á11ìå
u8 tcp_client_recvbuf[TCP_CLIENT_RX_BUFSIZE];        //TCP¿í»§¶Ë½óêÕêy¾Y»o3åÇø
u8 *tcp_client_sendbuf="ENC28J60 NETCONN TCP Client send data ";        //TCP¿í»§¶Ë·¢Ëíêy¾Y»o3åÇø
u8 tcp_client_flag;                //TCP¿í»§¶Ëêy¾Y·¢Ëí±ê־λ

#define K 8000
int value,value1,value2,value3;
char data[22];



//TCP¿í»§¶ËèÎÎñ
#define TCPCLIENT_PRIO                8
//èÎÎñ¶ÑÕ»′óD¡
#define TCPCLIENT_STK_SIZE        300
//èÎÎñ¶ÑÕ»
OS_STK TCPCLIENT_TASK_STK[TCPCLIENT_STK_SIZE];

//tcp¿í»§¶ËèÎÎñoˉêy
static void tcp_client_thread(void *arg)
{
        OS_CPU_SR cpu_sr;
        u32 data_len = 0;
        struct pbuf *q;
        err_t err,recv_err;
        static ip_addr_t server_ipaddr,loca_ipaddr;
        static u16_t                  server_port,loca_port;

        LWIP_UNUSED_ARG(arg);
        server_port = REMOTE_PORT;
        IP4_ADDR(&server_ipaddr, lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3]);
       
        while (1)
        {
                tcp_clientconn = netconn_new(NETCONN_TCP);  //′′½¨ò»¸öTCPá′½ó
                err = netconn_connect(tcp_clientconn,&server_ipaddr,server_port);//ᬽó·tÎñÆ÷
                if(err != ERR_OK)
                {
                        netconn_delete(tcp_clientconn); //·μ»ØÖμ2»μèóúERR_OK,é¾3ytcp_clientconnᬽó
                }
                else if (err == ERR_OK)    //′|àíDÂᬽóμÄêy¾Y
                {
                        struct netbuf *recvbuf;
                        tcp_clientconn->recv_timeout = 10;
                        netconn_getaddr(tcp_clientconn,&loca_ipaddr,&loca_port,1); //»ñ衱¾μØIPÖ÷»úIPμØÖ·oí¶Ë¿úoÅ
                        printf("ᬽóéÏ·tÎñÆ÷%d.%d.%d.%d,±¾»ú¶Ë¿úoÅÎa:%d ",lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3],loca_port);
                        while(1)
                        {
                                if((tcp_client_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //óDêy¾Yòa·¢Ëí
                                {
                                        int i=0;
                                        for(i=0;i<K;i++)
                                        {
                                                value=Get_Adc(ADC_Channel_10);
                              value1=Get_Adc(ADC_Channel_11);
                                                sprintf((char*)data,"%5d%5d%5s%5d ",value,value1,"curv",i);       
                                                err = netconn_write(tcp_clientconn ,(char*)data,strlen((char*)data),NETCONN_COPY); //·¢&#203;íêy&#190;Y
                                        }

                                        if(err != ERR_OK)
                                        {
                                                printf("·¢&#203;í꧰ü ");
                                        }
                                        tcp_client_flag &= ~LWIP_SEND_DATA;
                                }
                                else
                                {
                                value=Get_Adc(ADC_Channel_10);
                          value1=Get_Adc(ADC_Channel_11);
                                sprintf((char*)data,"%5d%5d%5s%5s ",value,value1,"Dint","Dint");       
                                err = netconn_write(tcp_clientconn ,(char*)data,strlen((char*)data),NETCONN_COPY); //·¢&#203;íêy&#190;Y                                       
                                }
                                       
                                if((recv_err = netconn_recv(tcp_clientconn,&recvbuf)) == ERR_OK)  //&#189;óê&#213;μ&#189;êy&#190;Y
                                {       
                                        OS_ENTER_CRITICAL(); //1&#216;&#214;D&#182;&#207;
                                        memset(tcp_client_recvbuf,0,TCP_CLIENT_RX_BUFSIZE);  //êy&#190;Y&#189;óê&#213;&#187;o3&#229;&#199;&#248;&#199;&#229;á&#227;
                                        for(q=recvbuf->p;q!=NULL;q=q->next)  //±éàúíê&#213;&#251;&#184;&#246;pbufá′±í
                                        {
                                                //&#197;D&#182;&#207;òa&#191;&#189;±′μ&#189;TCP_CLIENT_RX_BUFSIZE&#214;Dμ&#196;êy&#190;Yê&#199;·&#241;′óóúTCP_CLIENT_RX_BUFSIZEμ&#196;ê£óà&#191;&#213;&#188;&#228;£&#172;è&#231;1&#251;′óóú
                                                //μ&#196;&#187;°&#190;í&#214;&#187;&#191;&#189;±′TCP_CLIENT_RX_BUFSIZE&#214;Dê£óà3¤&#182;èμ&#196;êy&#190;Y£&#172;·&#241;&#212;òμ&#196;&#187;°&#190;í&#191;&#189;±′&#203;ùóDμ&#196;êy&#190;Y
                                                if(q->len > (TCP_CLIENT_RX_BUFSIZE-data_len)) memcpy(tcp_client_recvbuf+data_len,q->payload,(TCP_CLIENT_RX_BUFSIZE-data_len));//&#191;&#189;±′êy&#190;Y
                                                else memcpy(tcp_client_recvbuf+data_len,q->payload,q->len);
                                                data_len += q->len;         
                                                if(data_len > TCP_CLIENT_RX_BUFSIZE) break; //3&#172;3&#246;TCP&#191;í&#187;§&#182;&#203;&#189;óê&#213;êy×é,ì&#248;3&#246;       
                                        }
                                        OS_EXIT_CRITICAL();  //&#191;a&#214;D&#182;&#207;
                                        data_len=0;  //&#184;′&#214;&#198;íê3éoódata_lenòa&#199;&#229;á&#227;&#161;£                                       
                                        printf("%s ",tcp_client_recvbuf);
                                        netbuf_delete(recvbuf);
                                }else if(recv_err == ERR_CLSD)  //1&#216;±&#213;á&#172;&#189;ó
                                {
                                        netconn_close(tcp_clientconn);
                                        netconn_delete(tcp_clientconn);
                                        printf("·t&#206;&#241;&#198;÷%d.%d.%d.%d&#182;&#207;&#191;aá&#172;&#189;ó ",lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3]);
                                        break;
                                }
                        }
                }
        }
}

//′′&#189;¨TCP&#191;í&#187;§&#182;&#203;&#207;&#223;3ì
//·μ&#187;&#216;&#214;μ:0 TCP&#191;í&#187;§&#182;&#203;′′&#189;¨3é1|
//                &#198;&#228;&#203;&#251; TCP&#191;í&#187;§&#182;&#203;′′&#189;¨ê§°ü
INT8U tcp_client_init(void)
{
        INT8U res;
        OS_CPU_SR cpu_sr;
       
        OS_ENTER_CRITICAL();        //1&#216;&#214;D&#182;&#207;
        res = OSTaskCreate(tcp_client_thread,(void*)0,(OS_STK*)&TCPCLIENT_TASK_STK[TCPCLIENT_STK_SIZE-1],TCPCLIENT_PRIO); //′′&#189;¨TCP&#191;í&#187;§&#182;&#203;&#207;&#223;3ì
        OS_EXIT_CRITICAL();                //&#191;a&#214;D&#182;&#207;
       
        return res;
}

写法二  :写法二就报0xfa, Illegal value.  
#include "tcp_client_demo.h"
#include "lwip/opt.h"
#include "lwip_comm.h"
#include "lwip/lwip_sys.h"
#include "lwip/api.h"
#include "includes.h"
#include "key.h"
#include "ADC.h"
#include "led.h"

//////////////////////////////////////////////////////////////////////////////////           

struct netconn *tcp_clientconn;                                        //TCP CLIENTí&#248;&#194;&#231;á&#172;&#189;ó&#189;á11ì&#229;
u8 tcp_client_recvbuf[TCP_CLIENT_RX_BUFSIZE];        //TCP&#191;í&#187;§&#182;&#203;&#189;óê&#213;êy&#190;Y&#187;o3&#229;&#199;&#248;
u8 tcp_client_flag;                //TCP&#191;í&#187;§&#182;&#203;êy&#190;Y·¢&#203;í±ê&#214;&#190;&#206;&#187;

#define K 8000
int value,value1;
char data[22];
int i=0;
u32 data_len = 0;
        struct pbuf *q;
        err_t err,recv_err;
        static ip_addr_t server_ipaddr,loca_ipaddr;
        static u16_t                  server_port,loca_port;


//TCP&#191;í&#187;§&#182;&#203;è&#206;&#206;&#241;
#define TCPCLIENT_PRIO                8
//è&#206;&#206;&#241;&#182;&#209;&#213;&#187;′óD&#161;
#define TCPCLIENT_STK_SIZE        300
//è&#206;&#206;&#241;&#182;&#209;&#213;&#187;
OS_STK TCPCLIENT_TASK_STK[TCPCLIENT_STK_SIZE];

//tcp&#191;í&#187;§&#182;&#203;è&#206;&#206;&#241;oˉêy
static void tcp_client_thread(void *arg)
{
        OS_CPU_SR cpu_sr;
       

        LWIP_UNUSED_ARG(arg);
        server_port = REMOTE_PORT;
        IP4_ADDR(&server_ipaddr, lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3]);
       
        while (1)
        {
                tcp_clientconn = netconn_new(NETCONN_TCP);  //′′&#189;¨ò&#187;&#184;&#246;TCPá′&#189;ó
                err = netconn_connect(tcp_clientconn,&server_ipaddr,server_port);//á&#172;&#189;ó·t&#206;&#241;&#198;÷
                if(err != ERR_OK)
                {
                        netconn_delete(tcp_clientconn); //·μ&#187;&#216;&#214;μ2&#187;μèóúERR_OK,é&#190;3ytcp_clientconná&#172;&#189;ó
                }
                else if (err == ERR_OK)    //′|àíD&#194;á&#172;&#189;óμ&#196;êy&#190;Y
                {
                        struct netbuf *recvbuf;
                        tcp_clientconn->recv_timeout = 10;
                        netconn_getaddr(tcp_clientconn,&loca_ipaddr,&loca_port,1); //&#187;&#241;è&#161;±&#190;μ&#216;IP&#214;÷&#187;úIPμ&#216;&#214;·oí&#182;&#203;&#191;úo&#197;
                        printf("á&#172;&#189;óé&#207;·t&#206;&#241;&#198;÷%d.%d.%d.%d,±&#190;&#187;ú&#182;&#203;&#191;úo&#197;&#206;a:%d ",lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3],loca_port);
                        while(1)
                        {       
                                if((recv_err = netconn_recv(tcp_clientconn,&recvbuf)) == ERR_OK)  //&#189;óê&#213;μ&#189;êy&#190;Y
                                {       
                                        OS_ENTER_CRITICAL(); //1&#216;&#214;D&#182;&#207;
                                        memset(tcp_client_recvbuf,0,TCP_CLIENT_RX_BUFSIZE);  //êy&#190;Y&#189;óê&#213;&#187;o3&#229;&#199;&#248;&#199;&#229;á&#227;
                                        for(q=recvbuf->p;q!=NULL;q=q->next)  //±éàúíê&#213;&#251;&#184;&#246;pbufá′±í
                                        {
                                                //&#197;D&#182;&#207;òa&#191;&#189;±′μ&#189;TCP_CLIENT_RX_BUFSIZE&#214;Dμ&#196;êy&#190;Yê&#199;·&#241;′óóúTCP_CLIENT_RX_BUFSIZEμ&#196;ê£óà&#191;&#213;&#188;&#228;£&#172;è&#231;1&#251;′óóú
                                                //μ&#196;&#187;°&#190;í&#214;&#187;&#191;&#189;±′TCP_CLIENT_RX_BUFSIZE&#214;Dê£óà3¤&#182;èμ&#196;êy&#190;Y£&#172;·&#241;&#212;òμ&#196;&#187;°&#190;í&#191;&#189;±′&#203;ùóDμ&#196;êy&#190;Y
                                                if(q->len > (TCP_CLIENT_RX_BUFSIZE-data_len)) memcpy(tcp_client_recvbuf+data_len,q->payload,(TCP_CLIENT_RX_BUFSIZE-data_len));//&#191;&#189;±′êy&#190;Y
                                                else memcpy(tcp_client_recvbuf+data_len,q->payload,q->len);
                                                data_len += q->len;         
                                                if(data_len > TCP_CLIENT_RX_BUFSIZE) break; //3&#172;3&#246;TCP&#191;í&#187;§&#182;&#203;&#189;óê&#213;êy×é,ì&#248;3&#246;       
                                        }
                                        OS_EXIT_CRITICAL();  //&#191;a&#214;D&#182;&#207;
                                        data_len=0;  //&#184;′&#214;&#198;íê3éoódata_lenòa&#199;&#229;á&#227;&#161;£                                       
                                        printf("%s ",tcp_client_recvbuf);
                                        netbuf_delete(recvbuf);
                                }else if(recv_err == ERR_CLSD)  //1&#216;±&#213;á&#172;&#189;ó
                                {
                                        netconn_close(tcp_clientconn);
                                        netconn_delete(tcp_clientconn);
                                        printf("·t&#206;&#241;&#198;÷%d.%d.%d.%d&#182;&#207;&#191;aá&#172;&#189;ó ",lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3]);
                                        break;
                                }
                        }
                }
        }
}

//′′&#189;¨TCP&#191;í&#187;§&#182;&#203;&#207;&#223;3ì
//·μ&#187;&#216;&#214;μ:0 TCP&#191;í&#187;§&#182;&#203;′′&#189;¨3é1|
//                &#198;&#228;&#203;&#251; TCP&#191;í&#187;§&#182;&#203;′′&#189;¨ê§°ü
INT8U tcp_client_init(void)
{
        INT8U res;
        OS_CPU_SR cpu_sr;
       
        OS_ENTER_CRITICAL();        //1&#216;&#214;D&#182;&#207;
        res = OSTaskCreate(tcp_client_thread,(void*)0,(OS_STK*)&TCPCLIENT_TASK_STK[TCPCLIENT_STK_SIZE-1],TCPCLIENT_PRIO); //′′&#189;¨TCP&#191;í&#187;§&#182;&#203;&#207;&#223;3ì
        OS_EXIT_CRITICAL();                //&#191;a&#214;D&#182;&#207;
       
        return res;
}

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±&#214;óê1&#196;ü
       
        //&#182;¨ê±&#198;÷TIM33&#245;ê&#188;&#187;ˉ
        TIM_TimeBaseStructure.TIM_Period = arr; //éè&#214;&#195;&#212;ú&#207;&#194;ò&#187;&#184;&#246;&#184;üD&#194;ê&#194;&#188;t×°è&#235;&#187;&#238;&#182;ˉμ&#196;×&#212;&#182;ˉ&#214;&#216;×°&#212;&#216;&#188;&#196;′&#230;&#198;÷&#214;ü&#198;úμ&#196;&#214;μ       
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éè&#214;&#195;ó&#195;à′×÷&#206;aTIMxê±&#214;ó&#198;μ&#194;ê3yêyμ&#196;&#212;¤·&#214;&#198;μ&#214;μ
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //éè&#214;&#195;ê±&#214;ó·&#214;&#184;&#238;:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM&#207;òé&#207;&#188;&#198;êy&#196;£ê&#189;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉTIMxμ&#196;ê±&#188;&#228;&#187;ùêyμ¥&#206;&#187;

        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //ê1&#196;ü&#214;&#184;&#182;¨μ&#196;TIM3&#214;D&#182;&#207;,&#212;êDí&#184;üD&#194;&#214;D&#182;&#207;

        //&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;NVICéè&#214;&#195;
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3&#214;D&#182;&#207;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //&#207;è&#213;&#188;ó&#197;&#207;è&#188;&#182;1&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //′óó&#197;&#207;è&#188;&#182;3&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);  //3&#245;ê&#188;&#187;ˉNVIC&#188;&#196;′&#230;&#198;÷
       
        TIM_Cmd(TIM3, ENABLE);  //ê1&#196;üTIMx                                         
}

//&#182;¨ê±&#198;÷3&#214;D&#182;&#207;·t&#206;&#241;oˉêy
void TIM3_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //ò&#231;3&#246;&#214;D&#182;&#207;
        {
                if((tcp_client_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //óDêy&#190;Yòa·¢&#203;í
                {
                        value=Get_Adc(ADC_Channel_10);
                        value1=Get_Adc(ADC_Channel_11);
                        sprintf((char*)data,"%5d%5d%5s%5d ",value,value1,"curv",i);       
                        i++;
                        err = netconn_write(tcp_clientconn ,(char*)data,strlen((char*)data),NETCONN_COPY); //·¢&#203;íêy&#190;Y
                        if(err != ERR_OK)
                        {
                                printf("·¢&#203;í꧰ü ");
                        }
                        if(i>=7999)
                        {
                                tcp_client_flag &= ~LWIP_SEND_DATA;
                                i=0;
                                printf("8000ì&#245;êy&#190;Yíê3é");
                        }
                }
       
        }
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
}



以上两个写法我自己认为没有大的改动。。。为什么会报警。。请大虾们帮我解决下。。






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。