问题
使用任务延时函数时出现这个问题。
static void Test7Task(void *pvParameters)
{
uint16_t count=0;
TickType_t xFirstTime; // 记录延时前系统时钟节拍数
TickType_t xNextTime; // 记录挼是退出阻塞态时的系统时钟节拍数
while(1)
{
xFirstTime = xTaskGetTickCount(); // 获取任务进入点的系统时钟节拍数
xNextTime = xFirstTime; // 保存任务进入点的系统时钟节拍
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(200); // 模拟任务运行时间
vTaskDelayUntil(&xNextTime,pdMS_TO_TICKS(500)); // 延时500ms
count = xTaskGetTickCount() - xFirstTime;
taskENTER_CRITICAL();
printf("任务2:LED闪烁,任务2运行的节拍数为:%3d 节拍\r\n",count);
taskEXIT_CRITICAL();
}
}
解决
第一步
查看报错信息
.axf: Error: L6218E: Undefined symbol xTaskDelayUntil (referred from apptask.o).
它说xTaskDelayUntil(),思考可能版本更新这个函数了。
第二步
查看 task.c
文件,搜索 xTaskDelayUntil()
。
#if ( INCLUDE_xTaskDelayUntil == 1 )
BaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,
const TickType_t xTimeIncrement )
{
TickType_t xTimeToWake;
BaseType_t xAlreadyYielded, xShouldDelay = pdFALSE;
configASSERT( pxPreviousWakeTime );
configASSERT( ( xTimeIncrement > 0U ) );
configASSERT( uxSchedulerSuspended == 0 );
.......
原理函数名改了,我用的版本是FreeRTOSv202212.01
。
配置FreeRTOSfig.h
文件,加入一行:
#define INCLUDE_xTaskDelayUntil 1
OK,编译。
???怎么更多错了?
第三步
哦哦哦!要把之前vTaskDelayUntil()
删掉
#define INCLUDE_vTaskDelayUntil 0
解决完成
再编译。