vTaskDelay problem – C8051F120 Silabs

Dear members. I’d like to post a problem concerning the vTaskDelay primitive. So you can give me any idea about how to proceed. I’m using FreeRTOS in a Silicon Labs C8051F120 development board and the SDCC compiler (as indicated in the demo). I’ve slightly modified the demo code, to simplify the tasks. The code consists on - hardware start-up: prvSetupHardware() and prvSetupSystemClock() –  just one single task that toggles a bit and suspends its execution for some ticks - the main function: It performs hwd start-up and scheduler init. I compile the code without any problem. I download it into the hardware, but when I start running the code, it always keeps blocked in the vTaskDelay function. I tried to change task stack size and xDelay time, but it is always blocked in that point until I reset the hardware. Does anybody have any idea to solve this problem? Below I show the code of the application. Task looks like this: -——————————————— static void LoopTask(void *pvParameters){           const portTickType xDelay = 125 / portTICK_RATE_MS;      ( void ) pvParameters;     for(;;)     {         vTaskDelay(xDelay);         prvToggleOnBoardLED();     } } -——————————————– This task is initialized in main function in this way: void main(void){     prvSetupHardware();     xTaskCreate( LoopTask, "TAREA",  configMINIMAL_STACK_SIZE,  NULL, tskIDLE_PRIORITY + 1, ( xTaskHandle * ) NULL );     vTaskStartScheduler(); } Many Thanks for your help!!

vTaskDelay problem – C8051F120 Silabs

Check that the tick interrupt is working. If the tick is not executing then tasks that call vTaskDelay() will never unblock.

vTaskDelay problem – C8051F120 Silabs

Thanks edward3 for your answer. Then to check that the tick interrupt is working, How should I proceed? In a non FreeRTOS application I have to activate corresponding interrupt enable: IE, TI0, … but in FreeRTOS, is there any primitive to do that? I mean, it can be a bit confusing to mix high level instructions like vTaskDelay and low level like IE=1. In case the user is in charge of enable and activate these interruptions, where is the more convenient place, Just before calling the scheduler start-up? Many thanks for your help. Javier Burgoa

vTaskDelay problem – C8051F120 Silabs

I have the same problem. Here is the sequence: Main() runs and calls vTaskStartScheduler() From there all goes well and control is passed to the first task: vErrorChecks() which starts to execute. At this point interrupts are enabled but the clock hasn’t reached the first tick. Execution proceeds to calling: vTaskDelay() which executes down to the bottom force reschedule loop which calls: taskYIELD() At this point interrupts are disabled and control is never returned to original task and the timer ISR is not run since interrupts are disabled. Any help would be appreciated.