LWIP und NETCONN API + Freertos Frage

OP #5106474
Lesenswert?

Hi

sieht jnd auf Anhieb was ich hier falsch mache?
Ich benutze auf ein STM32 LWIP + free rtos. Ich will auf dem selben port 
UDP empfangen und senden.
So wie der Code jetzt ist, funktioniert es nicht. Beim ersten Start des 
UDP script gehts, beim 2ten mal nicht mehr.

Wenn ich Zeilen X1-X3 uncommente dann geht alles gut.

Wenn ich den Osdelay(1), was ich selber dazu erfunden hab, rausnehme, 
kriege ich einen statistischen bug. -> hard fault. Den kann ich aber 
nicht debuggen weil die board einzementiert sind :-(

Was wäre die korrekte rangehensweise?
Wäre für jeden Tip dankbar!!!!!!!!
uint8_t MyData[700];

/*---------------------------------------------------------------------- 
-------------*/
static void udpecho_thread(void *arg)
{
  err_t err, recv_err;

  LWIP_UNUSED_ARG(arg);
  uint8_t send_buffer[32]={0xff};
  uint16_t len = 0;


  conn = netconn_new(NETCONN_UDP);
  if (conn!= NULL)
  {
    err = netconn_bind(conn, IP_ADDR_ANY, ARTNET_PORT);

    if (err == ERR_OK)
    {
      while (1)
      {

        recv_err = netconn_recv(conn, &buf);

        if (recv_err == ERR_OK)
        {
          addr = netbuf_fromaddr(buf);
          port = netbuf_fromport(buf);
          len = netbuf_len(buf);
          Incr_debug(TLC_OUT);
          if (len < 700)
            netbuf_copy(buf, &MyData, len);
          if (len > 32)
            netbuf_ref ( buf,send_buffer , 32);
          netconn_connect(conn, addr, port);
          buf->addr.addr = 0;
          netconn_send(conn,buf);
          // ohne dieses delay kriege ich
          osDelay(1);
          netbuf_delete(buf);

          //wenn ich diese 3 zeilen uncommente geht alles ok.
          //X1 netconn_delete(conn);
          //X2 conn = netconn_new(NETCONN_UDP);
          //X3 err = netconn_bind(conn, IP_ADDR_ANY, ARTNET_PORT);
      }
      else
      {
        netconn_delete(conn);
      }
     }
  }
 }
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren