I have configured configUSE_TRACE_FACILITY to 1 as mentioned in website and ran the system. Where "trace buffer " will be stored(ie. which folder in PC) and when it will be stored?
The most likely reason is the tick interrupt is not executing. If there is no tick then time does not progress, and if time does not progress then the block time never expires.
I have also had problems with taskYIELD (implemented as portYield()) and timeouts in queuesend/receive routines. I think it might be related to FreeRTOS port I use. RTOS version is 5.2.0 and it is PIC18F port.
Only thing that actually yields processor time and does task switching is vTaskDelay in my case. At least it seems so.
I was looking a little bit into source code and it looks like vTaskDelay’s fiddling with event lists and what not somehow makes scheduler actually switch tasks when vTaskSwitchContext is called from taskYIELD as compared to just simply calling taskYIELD.
I’m not sure but it looks like I will have to go into digging through FreeRTOS source after weeks of fighting with phantom bugs in my project.
Note that taskYield() will only switch to a task with same or higher priority (and higher only if preemption is turned off or some ISR didn’t run the scheduler when it needed, as otherwise they would have been running already) as the task is still marked “Ready” so if it is still the highest priority task that is ready it will still run. taskDelay makes the current task “Not Ready” so lower priority tasks can execute.