Hello everybody,
I am currently working on a STM32F446RE project and use as
Operating system FreeRTOS. With FreeRTOS I am still a bit new and
I’d like to acquire the know-how.
With the Timer2 I have created an interrupt which is generated every 10s
is coming. The interrupt works so far so well (Tested with LED Pin
toggle).
Now I have created an Event Task in which the whole
Main program after the init of the peripherals should run.
void event_handler_task(void *pvParameters)
{
SemaphoreHandle_t init_synchronization = (SemaphoreHandle_t) pvParameters;
MX_TIM2_Init(); //Timer 2 init
HAL_TIM_Base_Start_IT(&htim2); //Timer 2 start interrupt
event_binary = xSemaphoreCreateBinary();
configASSERT(event_binary);
xSemaphoreGive(init_synchronization);
for (;
{
if (xSemaphoreTake(event_binary, portMAX_DELAY) == pdTRUE)
{
sprintf(debug_string, “We are in the Event Task!”);
debug_put_string(debug_string);
}
vTaskDelay(1000 / portTICK_RATE_MS);
}
}
The BinarySemaphore for this I have created Global in the same file:
static SemaphoreHandle_t event_binary = NULL;
The interrupt function looks like this:
void TIM2_IRQHandler(void)
{
static BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(event_binary, &xHigherPriorityTaskWoken);
if( xHigherPriorityTaskWoken == pdTRUE)
{
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
HAL_TIM_IRQHandler(&htim2);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
}
My problem now is that if I leave all the debugging to the
controller at xSemaphoreGiveFromISR. The code is only written up to
of this function and when I stop the debugger I am in
the following function:
configASSERT( pxQueue );
Behind the configASSERT there is an infinite life if the value of
is passed is 0.
My question now, am I using the wrong function or have I used it
incorrectly initialized?