mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-31 19:24:33 +02:00
freertos: fix allocation order for stack and TCB per portSTACK_GROWTH
This is as per FreeRTOS recommendation and allows to protect task TCB in case task stack has overflowed.
This commit is contained in:
@@ -161,9 +161,24 @@ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
|
|||||||
{
|
{
|
||||||
StaticTask_t *pxTCBBufferTemp;
|
StaticTask_t *pxTCBBufferTemp;
|
||||||
StackType_t *pxStackBufferTemp;
|
StackType_t *pxStackBufferTemp;
|
||||||
|
|
||||||
|
/* If the stack grows down then allocate the stack then the TCB so the stack
|
||||||
|
* does not grow into the TCB. Likewise if the stack grows up then allocate
|
||||||
|
* the TCB then the stack. */
|
||||||
|
#if (portSTACK_GROWTH > 0)
|
||||||
|
{
|
||||||
//Allocate TCB and stack buffer in internal memory
|
//Allocate TCB and stack buffer in internal memory
|
||||||
pxTCBBufferTemp = pvPortMallocTcbMem(sizeof(StaticTask_t));
|
pxTCBBufferTemp = pvPortMallocTcbMem(sizeof(StaticTask_t));
|
||||||
pxStackBufferTemp = pvPortMallocStackMem(configIDLE_TASK_STACK_SIZE);
|
pxStackBufferTemp = pvPortMallocStackMem(configIDLE_TASK_STACK_SIZE);
|
||||||
|
}
|
||||||
|
#else /* portSTACK_GROWTH */
|
||||||
|
{
|
||||||
|
//Allocate TCB and stack buffer in internal memory
|
||||||
|
pxStackBufferTemp = pvPortMallocStackMem(configIDLE_TASK_STACK_SIZE);
|
||||||
|
pxTCBBufferTemp = pvPortMallocTcbMem(sizeof(StaticTask_t));
|
||||||
|
}
|
||||||
|
#endif /* portSTACK_GROWTH */
|
||||||
|
|
||||||
assert(pxTCBBufferTemp != NULL);
|
assert(pxTCBBufferTemp != NULL);
|
||||||
assert(pxStackBufferTemp != NULL);
|
assert(pxStackBufferTemp != NULL);
|
||||||
//Write back pointers
|
//Write back pointers
|
||||||
@@ -186,9 +201,24 @@ void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
|
|||||||
{
|
{
|
||||||
StaticTask_t *pxTCBBufferTemp;
|
StaticTask_t *pxTCBBufferTemp;
|
||||||
StackType_t *pxStackBufferTemp;
|
StackType_t *pxStackBufferTemp;
|
||||||
|
|
||||||
|
/* If the stack grows down then allocate the stack then the TCB so the stack
|
||||||
|
* does not grow into the TCB. Likewise if the stack grows up then allocate
|
||||||
|
* the TCB then the stack. */
|
||||||
|
#if (portSTACK_GROWTH > 0)
|
||||||
|
{
|
||||||
//Allocate TCB and stack buffer in internal memory
|
//Allocate TCB and stack buffer in internal memory
|
||||||
pxTCBBufferTemp = pvPortMallocTcbMem(sizeof(StaticTask_t));
|
pxTCBBufferTemp = pvPortMallocTcbMem(sizeof(StaticTask_t));
|
||||||
pxStackBufferTemp = pvPortMallocStackMem(configTIMER_TASK_STACK_DEPTH);
|
pxStackBufferTemp = pvPortMallocStackMem(configTIMER_TASK_STACK_DEPTH);
|
||||||
|
}
|
||||||
|
#else /* portSTACK_GROWTH */
|
||||||
|
{
|
||||||
|
//Allocate TCB and stack buffer in internal memory
|
||||||
|
pxStackBufferTemp = pvPortMallocStackMem(configTIMER_TASK_STACK_DEPTH);
|
||||||
|
pxTCBBufferTemp = pvPortMallocTcbMem(sizeof(StaticTask_t));
|
||||||
|
}
|
||||||
|
#endif /* portSTACK_GROWTH */
|
||||||
|
|
||||||
assert(pxTCBBufferTemp != NULL);
|
assert(pxTCBBufferTemp != NULL);
|
||||||
assert(pxStackBufferTemp != NULL);
|
assert(pxStackBufferTemp != NULL);
|
||||||
//Write back pointers
|
//Write back pointers
|
||||||
|
Reference in New Issue
Block a user