//静态创建。
//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 128
//任务堆栈
StackType_t StartTaskStack[START_STK_SIZE];
//任务控制块
StaticTask_t StartTaskTCB;
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);
TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,//函数指针
const char * const pcName,函数名,字符串
const uint32_t ulStackDepth,栈的长度(不是大小,)
void * const pvParameters,给函数传递的参数
UBaseType_t uxPriority,任务优先级
StackType_t * const puxStackBuffer栈的起始地址,
StaticTask_t * const pxTaskBuffer 任务控制块的指针) /(返回值为任务句柄)
{ if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
{
pxNewTCB = ( TCB_t * ) pxTaskBuffer;
pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;//指向栈底
}
}
//动态创建
//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,函数指针
const char * const pcName,函数名字符串
const uint16_t usStackDepth,栈长度
void * const pvParameters,任务参数
UBaseType_t uxPriority,优先级
TaskHandle_t * const pxCreatedTask任务句柄。
) (返回值不是任务句柄)
{
TCB_t *pxNewTCB;
BaseType_t xReturn;
pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) );
pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) )
/* Store the stack location in the TCB. */
pxNewTCB->pxStack = pxStack;
由上可知,动态创建任务时任务控制块和栈空间是动态分配的,
静态创建任务时任务控制块和栈空间是提前分配好的,是静态的。