Wenn ich dieses Programm starte (siehe unten), funktioniert alles gut. Aber wenn ich die Daten zurück zu TPCIP deaktivieren, funktioniert das Programm schlecht.Empfangen von Daten von TCP (FreeRTOS, LWIP)
Hier ist Programm, adaequat: [1]: http://s27.postimg.org/seixg63hf/problem_2.jpg
static err_t prijata_data(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
void *data;
if (err == ERR_OK && p != NULL) {
// information of receive data
tcp_recved(pcb, p->tot_len);
//free buffer
pbuf_free(p);
data = p->payload; //copy value to send out of queue
xQueueSend(queue_ethernet, &data, 10); //send value to queue
//send data out
err = tcp_write(pcb, p->payload, p->len, TCP_WRITE_FLAG_COPY);
tcp_sent(pcb, NULL); // No need to call back
}
else
{
pbuf_free(p);
}
if (err == ERR_OK && p == NULL) {
close_conn(pcb);
}
return ERR_OK;
}
Und diese Funktion gehen hier: s
static err_t prijimani_dat(void *arg, struct tcp_pcb *pcb, err_t err){
LWIP_UNUSED_ARG(arg);
LWIP_UNUSED_ARG(err);
tcp_setprio(pcb, TCP_PRIO_MIN);
tcp_recv(pcb, prijata_data);
tcp_err(pcb, server_err);
tcp_poll(pcb, server_poll, 4);
return ERR_OK;
}
Complet Kommunikation in Aufgabe FreeRTOS implementieren ist:
extern void TCP_connection(void *pvParameters)
{
UNUSED(pvParameters);
const portTickType xDelayTime = 5/portTICK_RATE_MS;
struct tcp_pcb *tcp_server;
tcp_server = tcp_new();
tcp_bind(tcp_server, IP_ADDR_ANY, TCP_PORT);
while (1){
tcp_server = tcp_listen(tcp_server);
tcp_accept(tcp_server, prijimani_dat);
vTaskDelay(xDelayTime);
}
}
Aber wenn ich kann nur von TCP zu lesen, und ich möchte nicht, Daten zu TCPIP zurück, Programm arbeite schlecht .: [2]: http://s21.postimg.org/wlhqh31g5/problem_1.jpg
static err_t prijata_data(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err){
void *data;
if (err == ERR_OK && p != NULL) {
/* information of receive data */
tcp_recved(pcb, p->tot_len);
//free buffer
pbuf_free(p);
data = p->payload; /*copy value to send out of queue*/
xQueueSend(queue_ethernet, &data, 10); //send value to queue
}
else
{
pbuf_free(p);
}
if (err == ERR_OK && p == NULL) {
close_conn(pcb);
}
return ERR_OK;
}