PIC port explanation
I have moved this message from the bug tracker list. Please do not submit bug trackers until it has been shown that a bug exists. Original message follows:
I’m not very much into pic-assembler (yet), but I believe
there is an error in the pic-port.
From port.c:
<snippet from PortSAVECONTEXT macro>
/* Save the new top of the software stack in
the TCB. */
_asm
MOVFF pxCurrentTCB, FSR0L
MOVFF pxCurrentTCB + 1, FSR0H
MOVFF FSR1L, POSTINC0
MOVFF FSR1H, POSTINC0
_endasm
}
</snippet from PortSAVECONTEXT macro>
<snippet from PortRESTORECONTEXT macro>
/* Set FSR0 to point to pxCurrentTCB-
>pxTopOfStack. */
MOVFF pxCurrentTCB, FSR0L
MOVFF pxCurrentTCB + 1, FSR0H
</snippet from PortRESTORECONTEXT macro>
I cannot believe that the code in the PortSAVECONTEXT-
macro saves something in the TCB…
PIC port explanation
Here is the save context snippet with an explanation:
; Obtain the low byte of the pointer to the current
; TCB and place it in the low byte of the FSR0
; register.
MOVFF pxCurrentTCB, FSR0L
; Obtain the high byte of the pointer to the current
; TCB and place it in the high byte of the FSR0
; register.
MOVFF pxCurrentTCB + 1, FSR0H
; The FSR1 register is being used as the stack
; pointer. FSR0 now points to the current TCB
; structure – the first member of which is the top
; of stack. Store the top of stack being used into
; the TCB top of stack member.
; Move the low byte of the stack pointer into the
; TCB, then increment the pointer to the high
; byte.
MOVFF FSR1L, POSTINC0
; Move the high byte of the stack pointer into the
; TCB. The FSR0 register is pointing to the high
; byte already due to the post increment in
; the statement above.
MOVFF FSR1H, POSTINC0
PIC port explanation
Thanks, it starts making sense now I’m getting more and more into pic asm…