Start lwIP UDP in a Task
Hi,
I’ve been trying for hours to run a simple UDP example from the lwIP documentation in a FreeRTOS task.
My application does not return from the method call netconn_connect(). Although it is likely to be a lwIP problem I am not sure if I can use the netconn/netbuf methods in FreeRTOS.
Does anybody have experience with this? Is there an example available which also uses netconn_recv()?
The task function looks as follows:
portTASK_FUNCTION(vNTPClient, pvParameters) {
struct netconn *conn;
struct netbuf *buf;
struct ip_addr addr;
char *data;
char text[] = "A static text";
int i;
portTickType xLastWakeTime;
// Initialize with current tick count
xLastWakeTime = xTaskGetTickCount();
// Task loop
for (;;) {
// Check if interface is ready
if (netif_is_up(&MACB_if)) {
/* create a new connection */
conn = netconn_new(NETCONN_UDP);
/* set up the IP address of the remote host */
addr.addr = htonl(0x0a000001);
/* connect the connection to the remote host */
netconn_connect(conn, &addr, 7000);
/* create a new netbuf */
buf = netbuf_new();
data = netbuf_alloc(buf, 10);
/* create some arbitrary data */
for(i = 0; i < 10; i++)
data[i] = i;
/* send the arbitrary data */
netconn_send(conn, buf);
/* reference the text into the netbuf */
netbuf_ref(buf, text, sizeof(text));
/* send the text */
netconn_send(conn, buf);
/* deallocate connection and netbuf */
netconn_delete(conn);
netbuf_delete(buf);
}
else {
print_dbg("Waiting for IP…n");
}
// Delay the task
vTaskDelayUntil(&xLastWakeTime, ntpclientTICK_RATE);
}
}
Thanks for your help. Regards,
Mathias