Bob Ammerman [rammerman at prodigy.net] of RAm Systems says
The PIC18Cxx2 chips contain quite a few nice new features. One of the neatest is programmable access to the stack. This feature allows many powerful tricks.Notes:
- this code has _NOT_ been tested!
- all multi-byte values are little-endian
- I assume the code space never exceeds 16 bits worth (which it never will on the 242, 252, 442 or 452 chips).
Co-routines/tasks version 2 Allows cocalls from subroutines. Works by allocating parts of the stack space to each coroutine/task. Note: limits the available stack depth for each task. There is no checking if one task overruns anothers stack! CBLOCK TASKX_SP ; STKPTR for task X TASKY_SP ; STKPTR for task Y ENDC initialize: ; initialize values for all but the first task movlw 16 ; start tasky's stack at level 16 movwf TASKY_SP,A movwf STKPTR,A movlw low(tasky) movwf TOSL,A movlw high(tasky) movwf TOSH,A clrf STKPTR,A ; back to first task's stack area ...fall thru into first task... taskx: . . . rcall x_cocall_y . . rcall x_cocall_y . bra taskx x_cocall_y: movff STKPTR,TASKX_SP movff TASKY_SP,STKPTR return tasky: . . . rcall y_cocall_x . . rcall y_cocall_x . bra tasky y_cocall_x: movff STKPTR,TASKY_SP movff TASKX_SP,STKPTR return