2017-11-07 4 views
0

Ich programmiere die FPGA-Board ZYNQ XC7Z010-1CLG400C implementieren. Ich vermasse kontinuierlich Daten von einem ADC, speichere die Daten im Puffer (MesStrBuf) und sende diesen Puffer über Ethernet mit Hilfe von lwip satck.
, wenn ich das Programm ohne die Funktion tcp_poll(), Datenübertragung über Ethernet abgebrochen implementieren. Der Grund dafür, dass die Verbindung über Ethernet abgebrochen wird, dass der Puffer tcp_snd_buf wird immer voll und die Daten werden teilweise unter Verwendung von tcp_write und tcp_output gesendet, obwohl ich die ganze Größe tcp_send_buf mit dem Puffer (MesStrBuf) in jedem tcp_write() senden.Wie tcp-Poll-Funktion in lwip Stack

Deshalb möchte ich die Funktion tcp_poll() nutzen, bis die Daten vollständig gesendet sind (ich möchte warten bis die Daten gesendet werden) dann kann ich das Programm kontinuierlich ausführen und das Programm immer wieder ohne Probleme wiederholen wie ich bin Denken.

So will ich den Befehl

tcp_poll(tpcb,poll_function,1); 

implementieren, aber wie soll die Funktion poll_function() umgesetzt werden?

ist der PCB (Protokollsteuerblock) der TCP-Verbindung, die ich implementieren muss in poll_function() ist auch die PCB(tpcb) in tcp_write()?

Wie soll ich tcp_write() in poll_function() anrufen? oder es gibt keine Notwendigkeit, tcp_write() in der poll_function() zu rufen?

Dies ist der Code:

err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) 
{ 
    for(j=0;j<count;j++) 
    { 
     // write buffer **MesStrBuf** for sending 
     err = tcp_write(tpcb, MesStrBuf, sizeof(MesStrBuf), 1); 
     // prompt the system to send data now 
     tcp_output(tpcb); 
     tcp_poll(tpcb,poll_function,1); 
    } 
} 

Antwort