I am working with the latest version of FreeRTOS+TCP on a Zynq based hardware platform and I have been investigating why I have some unresponsiveness at start-up on my system.
I have tracked the issue down to the loop which waits for the PHY Autonegotiation to complete, this code appears to run at the highest priority and calls the Xilinx sleep() function which runs in a tight loop reading the system hardware timer causing the scheduler to stall while this ‘sleep’ takes place…
To eliminate the issue in my own setup I have replaced line 341 of the file:
It previously read:
My version is:
if( xTaskGetSchedulerState() != taskSCHEDULER_RUNNING ) sleep(1); else vTaskDelay( 10 );
This as you know allows the other lower priority tasks to run if they are ‘Ready’ and the task scheduler is active.
I thought you may like to include this modification in the next release?