Forum: Mikrocontroller und Digitale Elektronik LWIP und NETCONN API + Freertos Frage


von H. R. (hacker_r)


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);
      }
     }
  }
 }
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.