Hi,
Hi,

I have encountered several problems and I don't know if it's due to lwIP but I never encountered any problems whenever I used the function xil_printf.

At some locations in my code, if I use this function, the server is behaving in a weird way. I'm using OPB Uartlite and whenever I try to display the content of a variable, it crashes the server or my echo function is not responding at all. If I do a text only xil_printf, everything works fine.

#include "config.h"   // DEFAULT_PORT
#include "global.h"   // server_accept()
#include "lwip/tcp.h" // tcp_new(), tcp_bind(), tcp_listen(), tcp_accept()
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "lwip/debug.h"
#include "lwip/stats.h"
#include "xparameters.h"

err_t server_accept(void *arg, struct tcp_pcb *pcb, err_t err)
{
  struct connection_state *cs;
/* Allocate memory for the structure that holds the state of the
     connection. */
  cs = mem_malloc(sizeof(struct connection_state));

  if(cs == NULL) {
     xil_printf("could not malloc memory for server_state\r\n");
    return ERR_MEM;
  }
/* Initialize the structure. */
  cs->data = NULL;
  cs->left = 0;

  /* Tell TCP that this is the structure we wish to be passed for our
     callbacks. */
  tcp_arg(pcb, cs);

  /* Tell TCP that we wish to be informed of incoming data by a call
     to the http_recv() function. */
  tcp_recv(pcb, server_recv);
  tcp_err(pcb, server_err);
  tcp_poll(pcb, server_poll, 1);

xil_printf("Connection established with client %s on port %d.\r\n", getRemoteHostAddress(pcb->remote_ip), (int)(pcb->local_port));
  return ERR_OK;
}

The getRemoteHostAddress is char*. Thanks for your help,

Antoine.

Generaly speaking, printf is a non re-entrant function. If, at least, 2 tasks print a message at the same time, the behavior is unpredictable.
Please note that the same thing apply to malloc and free functions.
You have to check that xil_printf and mem_malloc are re-entrant functions. If not, you have to add a protection mechanism.

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

Reply via email to