I have a problem in running multi-threaded FreeRTOS applications with lwIP on the Zedboard. The problem causes the board to crash after receiving an arbitrary number of packets. Below I describe my system and the problem in details.
- ISE 14.5 running on Linux
- FreeRTOS V7.0.2
- lwIP 1.4.0
I have two applications using UDP sockets on a single ARM core on the board.
The applications receive a video stream from a PC over UDP, do some processing, and then display the video using the TFT interface of the Zedboard.
The applications consists of multiple threads realized using FreeRTOS tasks and the communication is realized using FreeRTOS xQueues.
Depending on the frame rate of the video stream from the PC, we experience a "system crash" after receiving an arbitrary number of packets (e.g.., 1 second up to 60 seconds).
With ISE 14.4, the "system crash" means that the ARM cores and the FPGA fabric stop working and we need to power off and power on again.
With ISE 14.5 (and exactly the same design), a "system crash" means that the ARM cores reboot while the FPGA fabric continues to work.
As you can see from the description above, upgrading from ISE 14.4 to 14.5 changed the "system crash" behavior which indicates that it is a bug in either FreeRTOS or lwIP.
We tried to debug the issue using JTAG. We can see that the code enters function u201CPrefetchAbortInterruptu201D But we can not backtrace the function that has called this function (register r14 points to a non-existing memory address!).
A trend in this bug seems to be that when sending UDP packets more quickly, the board tends to crash faster then when you send packets at a lower rate.
Does someone has similar issues when working with the combination FreeRTOS/lwIP/Zedboard? or knows what steps to follow in order to solve this bug?