mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Fix Stack alignment for Microchip PIC32MX port (#182)
* Fix Stack alignment for Microchip PIC32MX port The stack of a task was not 8 byte aligned. Adding one more unused space at the beginning of task stack (before simulated context) ensures that the stack is 8 byte aligned. The stack (with simulated context) of a newly created task looks like the following: +------------+ | UNUSED | +------------+ | UNUSED | +------------+ | 0xDEADBEEF | +------------+ | 0x12345678 | ^ +------------+ | | CAUSE | <-- SP After Context Restore | +------------+ | | STATUS | | +------------+ | | EPC | | +------------+ | | ra | | +------------+ | | s8 | | +------------+ | | t9 | | +------------+ | | t8 | | +------------+ | | t7 | | +------------+ | | t6 | | +------------+ | | t5 | | +------------+ | | t4 | | +------------+ | | t3 | | +------------+ | | t2 | | +------------+ | | t1 | | +------------+ Context | | t0 | (132 bytes) | +------------+ | | a3 | | +------------+ | | a2 | | +------------+ | | a1 | | +------------+ | | a0 | | +------------+ | | v1 | | +------------+ | | v0 | | +------------+ | | s7 | | +------------+ | | s6 | | +------------+ | | s5 | | +------------+ | | s4 | | +------------+ | | s3 | | +------------+ | | s2 | | +------------+ | | s1 | | +------------+ | | s0 | | +------------+ | | at | | +------------+ | | HI | | +------------+ | | LO | | +------------+ V | | +------------+ | | <-- SP After Context Save +------------+ Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com> * Update comment Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
This commit is contained in:
parent
c3117b4237
commit
2225bb5620
|
@ -159,7 +159,9 @@ const StackType_t * const xISRStackTop = &( xISRStack[ ( configISR_STACK_SIZE &
|
||||||
*/
|
*/
|
||||||
StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
|
StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
|
||||||
{
|
{
|
||||||
/* Ensure byte alignment is maintained when leaving this function. */
|
/* Ensure 8 byte alignment is maintained when the context is popped from
|
||||||
|
* stack. The size of the context is 33 words (132 bytes). */
|
||||||
|
pxTopOfStack--;
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
|
|
||||||
*pxTopOfStack = (StackType_t) 0xDEADBEEF;
|
*pxTopOfStack = (StackType_t) 0xDEADBEEF;
|
||||||
|
|
Loading…
Reference in a new issue