FreeRTOS 源码注释(prvAllocateTCBAndStack)

来源:互联网 发布:苹果软件下载排行 编辑:程序博客网 时间:2024/05/17 06:51

/* 为 TCB 和 堆栈分配内存空间,被 xTaskGenericCreate 调用*/

static tskTCB *prvAllocateTCBAndStack( unsigned short usStackDepth, portSTACK_TYPE *puxStackBuffer )

{

tskTCB *pxNewTCB;


/* 首先分配 TCB 结构的内存空间 */

pxNewTCB = ( tskTCB * ) pvPortMalloc( sizeof( tskTCB ) );


if( pxNewTCB != NULL )

{

/* 分配堆栈空间,有内存对齐要求 */

pxNewTCB->pxStack = ( portSTACK_TYPE * ) pvPortMallocAligned( ( ( ( size_t )usStackDepth ) * sizeof( portSTACK_TYPE ) ), puxStackBuffer );


if( pxNewTCB->pxStack == NULL )

{

/* 如果堆栈空间没有分配成功. 则删除 TCB 空间. */

vPortFree( pxNewTCB );

pxNewTCB = NULL;

}

else

{

/* 将堆栈填满 0xa5,方便调试,之所以是0xa5,因为 0xa5 = 1010 0101 非常有特点 */

memset( pxNewTCB->pxStack, tskSTACK_FILL_BYTE, usStackDepth * sizeof( portSTACK_TYPE ) );

}

}

return pxNewTCB;

}

体验新版博客
 
原创粉丝点击