Hi Noam,
Thanks for the response.
I will look at the links you sent, later today - see what I can discover.
I originally had the buffer creation/deletion inside the loop - so it
was a fresh buffer for every send. The final version needs to do this
anyway, as the audio packets to send will vary slightly in size. I only
changed it when I was trying to discover the cause of the ERR_USE return.
What I don't understand is why/how repeated sends with the same
source/destination address and port should (after a time) cause an
error. My understanding is, this should only happen if we attempt to
create a new connection with the same character as an existing one - as
far as I can see, my software should keep using the original one
(changing the destination address only if needed).
Many thanks,
Mike.
On 27/07/2016 21:46, Noam Weissman wrote:
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
--
FACE Systems Ltd
The Old Boat House
Cadgwith
Cornwall TR12 7JX
T:01326 291031
M:07831 401464
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users