PIC 18C Microcontoller Program Flow Method

Co-routines/tasks Allows all cocalls

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:

  1. this code has _NOT_ been tested!
  2. all multi-byte values are little-endian
  3. 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