Hi,

I never worked with netconn so I am not sure. I worked mainly with RAW API.


See these:

http://www.ultimaserial.com/avr_lwip_udp.html

lwIP Example, How to write an UDP echo broadcaster on 
...<http://www.ultimaserial.com/avr_lwip_udp.html>
www.ultimaserial.com
lwIP UDP Echo Broadcaster Example using Raw API, Socket or Netconn approaches 
UltimaSerial . Windaq Add-ons



https://lists.nongnu.org/archive/html/lwip-users/2010-04/msg00053.html




http://www.freertos.org/FreeRTOS_Support_Forum_Archive/April_2009/freertos_Start_lwIP_UDP_in_a_Task_3216066.html




Seems that in the examples for every send they allocate a new buffer and after 
every send the delete it.

For me it looks perfectly sensible.


I hope that helps a bit.


BR,

Noam.

[RTOS Support] Start lwIP UDP in a Task - 
FreeRTOS<http://www.freertos.org/FreeRTOS_Support_Forum_Archive/April_2009/freertos_Start_lwIP_UDP_in_a_Task_3216066.html>
www.freertos.org
FreeRTOS support forum archive - Start lwIP UDP in a Task



________________________________
From: lwip-users <[email protected]> on behalf of 
Mike Fleetwood <[email protected]>
Sent: Wednesday, July 27, 2016 6:07 PM
To: [email protected]
Subject: [lwip-users] Problems with sending UDP packets in FreeRTOS


Hi,

I’m hoping someone can help me with a problem that has been causing me grief 
for a few days now!



I am writing an RTP audio system, that needs to send a packet of audio data 
every 4mS.  This is in a multi-thread RTOS environment, running on STM32F427, 
with initial code generated using ST’s “Cube” (wish I hadn’t!).  I have threads 
to handle NetBIOS and HTTP, but they are all disabled at the moment.



The problem I’m having is that after a variable length of time – sometimes 
immediately on start-up, sometimes after half an hour – the code stops working. 
 The central “netconn_send” returns with “ERR_USE”.  I have tried many 
variations with this code, all showing the same problem.  None of the other 
error warnings get activated, only the GPIO pins set to indicate the error.



Question 1: Why should send return with ERR_USE?  At present there is only one 
connection and it is only bound/connected once – outside the loop.  I get the 
same error with connection within the loop, or if I use sendto instead.



Question 2: Why does this supposedly non-fatal error cause all lower level LWIP 
functions to stop?  If I have the HTTP thread running (to show status/fault 
information) it also stops.



Question 3: Why does not SOF_REUSEADDR mask the error (SO_REUSE is enabled in 
lwipopts)?



Many thanks,

Mike.



void udp_test(void *arg)

{

  struct netconn *conn;

  struct netbuf *buf;

  char *data;

  err_t err;

  uint16_t index;

  size_t bufsize = 100;



  conn = netconn_new(NETCONN_UDP);

  if (conn == NULL) debugmessage("Could not create new netconn for UDP 
test<br>");

  if (conn != NULL)

  {

    ip_set_option(conn->pcb.udp, SOF_REUSEADDR);



    err = netconn_bind(conn, IP_ADDR_ANY, 5004);

    if (err != ERR_OK) debugmessage("Could not bind to port 5004 for RTP 
data<br>");



//    err = netconn_connect(conn, IP_ADDR_BROADCAST, 5004);

//    if (err != ERR_OK) debugmessage("Could not connect port 5004 to BROADCAST 
for RTP data<br>");



//    while(1)

    {

      buf = netbuf_new();

      if (buf == NULL) debugmessage("Could not create netbuf for UDP test<br>");

      if (buf != NULL)

      {

        data = netbuf_alloc(buf, bufsize);

        if (data == NULL) debugmessage("Could not allocate pointer to UDP test 
data in netbuf<br>");

        if (data != NULL)

        {

          while(1)

          {

            HAL_GPIO_WritePin(CONT6_GPIO_Port, CONT6_Pin, GPIO_PIN_SET);

            for (index = 0; index <bufsize; index++)

            {

              data[index] = index;

            }

//            err = netconn_send(conn, buf);

            err = netconn_sendto(conn, buf, IP_ADDR_BROADCAST, 5004);

            if (err == ERR_USE) HAL_GPIO_WritePin(CONT3_GPIO_Port, CONT3_Pin, 
GPIO_PIN_SET);

            if (err == ERR_MEM) HAL_GPIO_WritePin(CONT4_GPIO_Port, CONT4_Pin, 
GPIO_PIN_SET);

            if (err != ERR_OK) HAL_GPIO_WritePin(CONT5_GPIO_Port, CONT5_Pin, 
GPIO_PIN_SET);

            HAL_GPIO_WritePin(CONT6_GPIO_Port, CONT6_Pin, GPIO_PIN_RESET);

            osDelay(4);

          }

          netbuf_delete(buf);

        }

      }

//      osDelay(4);

    }

  }

}

Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10


_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to