Multiple tasks not responding when mixed with a semaphore

Which function are they looping in? portTASK_FUNCTION is a macro used to qualify a function, and in your case is probably #defined to nothing anyway. Which function is that macro on? Please link to the line here: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/master/tasks.c

[oops posted too soon]

From this:

I assume you are actually in the idle task, which is the function you will normally see running if you pause on the debugger when your application tasks spend most of their time in the Blocked state (as yours do). If this line is never yielding it just means there are no other idle priority tasks ready to run.

What is the difference between your printf() and xil_printf() implementations? Are they thread safe? Your issue could just be that you are trying to print from multiple threads.

Have you been through the items here regarding using configASSERT() and enabling stack overflow protection? FreeRTOS - Open Source RTOS Kernel for small embedded systems

Also, have you read this section RTOS for ARM Cortex-A of the page describing how to use FreeRTOS on a Cortex-A?