mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-31 19:24:33 +02:00
Merge branch 'bugfix/freertos_stack_tcb_alloc_order_v4.4' into 'release/v4.4'
freertos: fix allocation order for stack and TCB per portSTACK_GROWTH (v4.4) See merge request espressif/esp-idf!18455
This commit is contained in:
@@ -116,13 +116,15 @@
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vTaskGetSnapshot( TaskHandle_t pxTask, TaskSnapshot_t *pxTaskSnapshot )
|
BaseType_t vTaskGetSnapshot( TaskHandle_t pxTask, TaskSnapshot_t *pxTaskSnapshot )
|
||||||
{
|
{
|
||||||
configASSERT( portVALID_TCB_MEM(pxTask) );
|
if (portVALID_TCB_MEM(pxTask) == false || pxTaskSnapshot == NULL) {
|
||||||
configASSERT( pxTaskSnapshot != NULL );
|
return pdFALSE;
|
||||||
|
}
|
||||||
pxTaskSnapshot->pxTCB = (void*) pxTask;
|
pxTaskSnapshot->pxTCB = (void*) pxTask;
|
||||||
pxTaskSnapshot->pxTopOfStack = pxTCBGetTopOfStack((void*) pxTask);
|
pxTaskSnapshot->pxTopOfStack = pxTCBGetTopOfStack((void*) pxTask);
|
||||||
pxTaskSnapshot->pxEndOfStack = pxTCBGetEndOfStack((void*) pxTask);
|
pxTaskSnapshot->pxEndOfStack = pxTCBGetEndOfStack((void*) pxTask);
|
||||||
|
return pdTRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskHandle_t pxTaskGetNext( TaskHandle_t pxTask )
|
TaskHandle_t pxTaskGetNext( TaskHandle_t pxTask )
|
||||||
|
@@ -80,8 +80,9 @@ TaskHandle_t pxTaskGetNext( TaskHandle_t pxTask );
|
|||||||
* @note This function should not be used while FreeRTOS is running (as it doesn't acquire any locks).
|
* @note This function should not be used while FreeRTOS is running (as it doesn't acquire any locks).
|
||||||
* @param pxTask task handle.
|
* @param pxTask task handle.
|
||||||
* @param pxTaskSnapshot address of TaskSnapshot_t structure to fill.
|
* @param pxTaskSnapshot address of TaskSnapshot_t structure to fill.
|
||||||
|
* @return pdTRUE if operation was successful else pdFALSE
|
||||||
*/
|
*/
|
||||||
void vTaskGetSnapshot( TaskHandle_t pxTask, TaskSnapshot_t *pxTaskSnapshot );
|
BaseType_t vTaskGetSnapshot( TaskHandle_t pxTask, TaskSnapshot_t *pxTaskSnapshot );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@@ -173,9 +173,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
|
||||||
@@ -198,9 +213,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