lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] UDP server on LwIP socket falls into hard fault if inpu


From: Иван
Subject: Re: [lwip-users] UDP server on LwIP socket falls into hard fault if input string longer than 19 bytes
Date: Tue, 07 Jun 2016 20:24:27 +0300

In my application malloc() is retargeted to pvPortMalloc(). I tried to allocate 
buffers on stack and global and static. Stack size of thread is as huge as 2048 
bytes (512 words). No effect, all the same.


07.06.2016, 14:57, "Noam Weissman" <address@hidden>:
> Hi,
>
> Why are you calling malloc inside the thread ? if you allocate a buffer once, 
> there is no need to use malloc
> define it as an array.
>
> malloc allocates memory from the micro's heap, not from the FreeRTOS heap.
> Check that you heap has sufficient memory. Normally in an average STM example 
> the heap is
> small around 0x200 == 512 bytes !
>
> You have a few options instead of calling malloc:
> 1. allocate a static buffer outside of your thread and use it (global).
> 2. allocate an array inside your thread but you must set that thread, stack 
> size properly.
>
> In option 2 all the none dynamic data inside the thread is allocation from 
> the FreeRTOS heap.
>
> Hope the above helped in some way.
>
> BR,
> Noam.
>
> -----Original Message-----
> From: lwip-users [mailto:address@hidden On Behalf Of ????
> Sent: Tuesday, June 07, 2016 12:13 PM
> To: address@hidden
> Subject: [lwip-users] UDP server on LwIP socket falls into hard fault if 
> input string longer than 19 bytes
>
> Hello, people.
> I need help in solving very annoying problem, which I cannot track. Here is 
> my question on stackoverflow.com
>
> All works fine with short messages. But 20 bites and more knocks out uC into 
> hard fault. I think it because of NULL pointer exception. My embedded system 
> consists of STM32F4, FreeRTOS and LwIP. Core was taken from ST example. Here 
> is the code of thread of simple UDP server.
>
>  #include <string.h>
>  #include <stdbool.h>
>  #include <stdlib.h>
>  #include "lwip/sockets.h"
>  #include "./udpCLI.h"
>  //#include "Sledge.h" //for assert_amsg(), which print what and where fails 
> before stop execution
>
>  static void udpCLI_thread(void *arg)
>  {
>      int sockfd; // socket file descriptor
>      const uint16_t serverport = UDP_PORT_NUMBER_CLI;
>      struct sockaddr_in serveraddr = {0}, clientaddr = {0};
>      socklen_t addrlen;// = sizeof(struct sockaddr_in);
>      const uint16_t bufin_SIZE = 200, bufout_SIZE = 1024;
>      char *bufin  = malloc(bufin_SIZE);  assert_amsg(bufin != NULL);  // 
> stops execution with printing message "bufin != NULL" in stdout/stderr
>      char *bufout = malloc(bufout_SIZE); assert_amsg(bufout != NULL);
>
>      LWIP_UNUSED_ARG(arg);  //(void)arg;
>
>      debugf2( "udpCLI_thread"NEWLINE );
>
>      sockfd = socket(AF_INET, SOCK_DGRAM, 0);
>      assert_msg("udpCLI_thread: ERROR opening socket", sockfd>=0);
>
>      /*
>       * build the server's Internet address
>       */
>      serveraddr.sin_family = AF_INET;
>      serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
>      serveraddr.sin_port = htons(serverport);
>
>      /*
>       * bind: associate the socket with a port
>       */
>      if( bind(sockfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 
> 0 )
>          error("udpCLI_thread: ERROR on binding");
>
>      // main loop: wait for a datagram, then echo it
>      while(1)
>      {
>          addrlen = sizeof(struct sockaddr_in);  // THIS DID NOT HELP
>          // recvfrom: receive a UDP datagram from a client
>          int n = recvfrom(sockfd, bufin, bufin_SIZE, /*flags*/0, (struct 
> sockaddr*)&clientaddr, &addrlen);
>          // handle rusult
>          //if (n < 0)
>          // future process and response
>          //....
>  }
>  }
>
> Program control never returns from recvfrom() function if input message 
> length is more than 19 bytes. And never returns from function 
> sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0); in function 
> netconn_recv_data() in file api_lib.c at line 371.
>
> The same thing met for another example code.
> Please help to resolve this problem.
>
> This message has no MIME, only plain text.
> --
> Ivan Kuvaldin
>
> _______________________________________________
> lwip-users mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
> _______________________________________________
> lwip-users mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/lwip-users



reply via email to

[Prev in Thread] Current Thread [Next in Thread]