ARM-7 Stack pointer register in different modes during context switches

dcgirish16 wrote on Wednesday, September 17, 2014:

Hi,
I need a clarification regarding functions portSAVE_CONTEXT() & portRESTORE_CONTEXT() for ARM7 for example LPC-2129. These macros can be invoked from any where for example IRQ(timer interrupt) etc… when the processor enters IRQ mode, stack pointer in use will be SP_irq. What I could make out is, while saving the context or restoring, how is the SP_system is accessed for saving or filling the stack pointer to or from TCB. in portRESTORE_CONTEXT() I could understand that the processor mode will be switched to system mode by “SUBS PC, LR, #4” but the stack pointer gets restored before that… could some one please clarify it?

Thanks,
Girish

rtel wrote on Wednesday, September 17, 2014:

The comments in the code tell you where it is done:

/* Set R0 to point to the task stack pointer. */\
"STMDB  SP,{SP}^                            \n\t"\
"NOP                                        \n\t"\
"SUB    SP, SP, #4                          \n\t"\
"LDMIA  SP!,{R0}                            \n\t"\

If you don’t understand the assembly code then please refer to the ARM instruction set documentation.

Regards.

dcgirish16 wrote on Wednesday, September 17, 2014:

Thanks… Yes I gone through the comment and even the assembly code… but I had missed the meaning of “^” in the code… sorry for that thanks a lot

dcgirish16 wrote on Wednesday, September 17, 2014:

Thanks… Yes I gone through the comment and even the assembly code… but I had missed the meaning of “^” in the code… sorry for that thanks a lot