项目场景:
STM32CUBEIDE生成代码,STM32F1运行FreeRTOS问题描述:
延时函数osDelayUntil()
无法正常运行
原因分析:
看源码osStatus osDelayUntil (uint32_t *PreviousWakeTime, uint32_t millisec)
{
#if INCLUDE_vTaskDelayUntil
TickType_t ticks = (millisec / portTICK_PERIOD_MS);
vTaskDelayUntil((TickType_t *) PreviousWakeTime, ticks ? ticks : 1);
return osOK;
#else
(void) millisec;
(void) PreviousWakeTime;
return osErrorResource;
#endif
}
osDelayUntil()
内部调用了FreeRTOS原生的vTaskDelayUntil()
实现,需要先保证这个函数的使能的,否则将会返回Error,而STM32CUBE默认生成的代码没有对这个进行使能。
解决方案:
配置使能vTaskDelayUntil()
,两种方法
- STM32CUBE里配置
- 在FreeRTOSConfig.h中修改
#define INCLUDE_vTaskDelayUntil 1