Here is an excerpt of the code I am running:
// Task 1000ms
TaskHandle_t xTaskHandle_1000ms;
const char NAME_1000MS[] = "Task_1000ms";
const size_t STACK_SIZE_1000MS = 256;
const uint8_t PRIORITY_1000MS = 2;
const struct TaskParams TASK_PARAMS_1000MS = {.PERIOD = 1000};
// Task 200ms
TaskHandle_t xTaskHandle_200ms;
const char NAME_200MS[] = "Task_200ms";
const size_t STACK_SIZE_200MS = 256;
const uint8_t PRIORITY_200MS = 2;
const struct TaskParams TASK_PARAMS_200MS = {.PERIOD = 200};
void application_setup() {
xTaskCreate(task_1000ms, NAME_1000MS, STACK_SIZE_1000MS,
(void *)&TASK_PARAMS_1000MS, PRIORITY_1000MS,
&xTaskHandle_1000ms);
xTaskCreate(task_200ms, NAME_200MS, STACK_SIZE_200MS,
(void *)&TASK_PARAMS_200MS, PRIORITY_200MS, *&xTaskHandle_200ms);
vTaskStartScheduler();
}
static void task_1000ms(void *pVParameters) // This is a task.
{
const struct TaskParams *params = (struct TaskParams *)pVParameters;
while (1) {
// Run activities
blink_main();
debug_main();
; // ALL OK UNTIL HERE
vTaskDelay(pdMS_TO_TICKS(params->PERIOD));
; // NEVER REACHED. GOT STACK INTO vTaskDelay
}
}
Once the program enters vTaskDelay
, as commented above, it never comes out.
Here is where it gets stuck:
WWDG_IRQHandler () at startup_stm32f446xx.s:114
114 b Infinite_Loop
The task_200ms does not do anything. Even if I completely remove it, I get the same issue.
What should I check? Is there anything special in FreeRTOSConfig.h that I should enable/disable?