8.3 任务创建过程分析
8.3.1 任务创建函数分析
前面学了任务创建可以使用动态方法或静态方法(不讨论使用 MPU 的情况),它们分别使用
函数 xTaskCreate()和 xTaskCreateStatic()。本节我们就以函数 xTaskCreate()为例来分析一下
FreeRTOS 的任务创建过程,函数 xTaskCreateStatic()类似,这里不做分析。函数 xTaskCreate()代
码如下,注意这里为了缩小篇幅去掉了函数中的条件编译等不重要的语句!
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;
/********************************************************************/
/***************使用条件编译的向上增长堆栈相关代码省略***************/
/********************************************************************/
StackType_t *pxStack;
pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) *\ (1)
sizeof( StackType_t ) ) );
if( pxStack != NULL )
{
pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); (2)
if( pxNewTCB != NULL )
{
pxNewTCB->pxStack = pxStack; (3)
}
else
{
vPortFree( pxStack ); (4)
}
}
else
{
pxNewTCB = NULL;
}
if( pxNewTCB != NULL )