建立空闲任务
定义空闲任务栈
/* 定义空闲任务的栈 */#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
空闲任务的栈是一个定义好的数组,大小由 FreeRTOSConfig.h 中定义的宏 configMINIMAL_STACK_SIZE 控制,默认为 128,单位为字,即 512 个字节。
定义空闲任务的任务控制块
/* 定义空闲任务的任务控制块 */TCB_t IdleTaskTCB;
创建空闲任务
void vApplicationGetIdleTaskMemory( TCB_t **ppxIdleTaskTCBBuffer,StackType_t **ppxIdleTaskStackBuffer,uint32_t *pulIdleTaskStackSize );void vTaskStartScheduler( void ){/*=======================创建空闲任务 start=======================*/TCB_t *pxIdleTaskTCBBuffer = NULL; /* 用于指向空闲任务控制块 */StackType_t *pxIdleTaskStackBuffer = NULL; /* 用于空闲任务栈起始地址 */uint32_t ulIdleTaskStackSize;/* 获取空闲任务的内存:任务栈和任务 TCB */vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, //&pxIdleTaskStackBuffer,&ulIdleTaskStackSize );/* 创建空闲任务 */ (2)xIdleTaskHandle =xTaskCreateStatic( (TaskFunction_t)prvIdleTask, /* 任务入口 */(char *)"IDLE", /* 任务名称,字符串形式 */(uint32_t)ulIdleTaskStackSize , /* 任务栈大小,单位为字 */(void *) NULL, /* 任务形参 */(StackType_t *)pxIdleTaskStackBuffer, /* 任务栈起始地址 */(TCB_t *)pxIdleTaskTCBBuffer ); /* 任务控制块 *//* 将任务添加到就绪列表 */ (3)vListInsertEnd( &( pxReadyTasksLists[0] ),&( ((TCB_t *)pxIdleTaskTCBBuffer)->xStateListItem ) );/*==========================创建空闲任务 end=====================*//* 手动指定第一个运行的任务 */pxCurrentTCB = &Task1TCB;/* 启动调度器 */if ( xPortStartScheduler() != pdFALSE ){/* 调度器启动成功,则不会返回,即不会来到这里 */}}
