#include "user.h" taskParmStruc task1Parm; taskParmStruc task2Parm; taskParmStruc *task1(unsigned char pos) { static unsigned char i = 0; switch(pos) { case 0: i = 0; loop1: #ifdef WSDEBUG printf("task 1 is at pos %d, loop iteration number %d\n",pos,i); #endif i++; if (i == 5) { START_TASK(task1Parm, TASK_2, 1); } if (i == 7) { SIGNAL(task1Parm, 0, 1); } SCHEDULE(task1Parm, 1); case 1: if (i < 9) goto loop1; SCHEDULE(task1Parm, 2); case 2: GET_SEM(task1Parm, 0, 3); default: #ifdef WSDEBUG printf("Sem 0 value is %d\n", task1Parm.val); printf("task 1 is about to exit\n"); #endif EXIT_TASK(task1Parm, TASK_1, 3); } } taskParmStruc *task2(unsigned char pos) { static unsigned char i = 0; switch(pos) { case 0: i = 0; loop2: #ifdef WSDEBUG printf("task 2 is at pos %d %d\n",pos,i); #endif i++; if (i == 3) { WAIT(task2Parm, 0, 1); } SCHEDULE(task2Parm, 1); case 1: if (i < 9) goto loop2; SCHEDULE(task2Parm, 2); case 2: SET_SEM(task2Parm, 0, 48, 3); case 3: WAIT(task2Parm, 0, 4); case 4: GET_SEM(task2Parm, 0, 5); case 5: #ifdef WSDEBUG printf("Sem 0 value is %d\n", task2Parm.val); #endif SIGNAL(task2Parm, 0, 6); default: #ifdef WSDEBUG printf("task 2 is about to exit\n"); #endif EXIT_TASK(task2Parm, TASK_2, 6); } } int main() { startTask(TASK_1); //startTask(TASK_2); schedule(); return 0; }