Start lwIP UDP in a Task

mathias3 wrote on Thursday, April 16, 2009:

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 (;:wink: {
      // 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