FLEXCAN_DRV_Init函数里面调用了OSIF_SemaCreate和OSIF_SemaDestroy,这两个OSIF的接口需要等FreeRTOS起来以后才能调用。
所以可将该部分初始化放在初始化任务当中,在任务执行完毕后通过vTaskDelete(NULL)删除任务。这样当任务运行前,通过vTaskStartScheduler()启动RTOS任务调度器,FLEXCAN_DRV_Init即可正常运行,初始化任务内容全部运行完毕后,删除初始化任务自身。
void Task_Initialize(void)
{
/* use application initial task to startup, because some driver implementation
need use RTOS task scheduler, such as sbc uja1169 use spi communication with
rtos interface */
xTaskCreate((TaskFunction_t )AppInitTask,
(const char* )"AppInit",
(uint16_t )128,
(void* )NULL,
(UBaseType_t )APP_INIT_TASK_PRIO,
(TaskHandle_t* )NULL);
/* start task scheduler use RTOS */
vTaskStartScheduler();
}