您的位置:首页 > 其它

FreeRTOS 源码注释(prvAllocateTCBAndStack)

2012-06-22 21:12 351 查看
/* 为 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;

}

体验新版博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: