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;
}
体验新版博客
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;
}
体验新版博客
相关文章推荐
- FreeRTOS 源码注释(prvAllocateTCBAndStack)
- FreeRTOS 源码注释(vTaskDelayUntil)
- 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析
- FreeRTOS 源码注释(vTaskDelay)
- FreeRTOS 源码注释(vTaskDelay)
- FreeRTOS 源码注释(vTaskSuspend)
- FreeRTOS 源码注释(vTaskSuspend)
- FreeRTOS 源码注释(prvInitialiseTCBVariables)
- FreeRTOS 源码注释(prvInitialiseTCBVariables)
- FreeRTOS 源码注释(prvInitialiseTaskLists)
- FreeRTOS 源码注释(prvInitialiseTaskLists)
- FreeRTOS 源码注释(prvAddTaskToReadyQueue)
- FreeRTOS 源码注释(xTaskGenericCreate)
- FreeRTOS 源码注释(prvAddTaskToReadyQueue)
- FreeRTOS 源码注释(xTaskGenericCreate)
- FreeRTOS 源码注释(prvCheckTasksWaitingTermination)
- FreeRTOS 源码注释(vTaskDelete)
- FreeRTOS 源码注释(prvCheckTasksWaitingTermination)
- 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析
- FreeRTOS 源码注释(vTaskDelete)