由系统动态分配任务所需要的内存空间, 简单, 方便, 灵活, 节省空间.
缺点: 容易产生内存碎片.?
//动态任务1
TaskHandle_t Task1Handle;
void vTask1Function( void * param)
{
while(1)
{
printf("1");
//taskYIELD();
}
}
//参数: 任务函数, 任务名称, 堆栈大小, 任务参数, 任务优先级, 任务句柄
//返回值类型: BaseType_t
xTaskCreate(vTask1Function, "task1", 100, NULL, 1, &Task1Handle); //调用
由程序员自己定义空间大小, 不易产生内存碎片.
缺点: 任务删除无法回收内存.
#define configSUPPORT_STATIC_ALLOCATION 1 //配置文件,开启静态分配
//静态任务2
StackType_t task2Stack[128];
StaticTask_t task2TCB;
void vStaticTask2Function( void * param)
{
while(1)
{
printf("2");
//taskYIELD();
}
}
//空闲任务需要重写
StaticTask_t IdleTaskTCB;
StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
StackType_t ** ppxIdleTaskStackBuffer,
uint32_t * pulIdleTaskStackSize )
{
*ppxIdleTaskTCBBuffer = &IdleTaskTCB;
*ppxIdleTaskStackBuffer = IdleTaskStack;
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
//参数1: 静态任务函数, 任务名, 任务堆栈大小, 任务参数, 任务优先级, 堆栈空间, TCB
//返回值: 任务句柄
xTaskCreateStatic(vStaticTask2Function, "task2", 128, NULL, 1, task2Stack, &task2TCB);
?