uint8_t run_active_tasks() { //currently assumes no 'wait' events uint8_t i = 0; uint8_t linked = 0; uint8_t next = 0; //disable sw timer do{ i = next; if( (taskList[i].counter == 1) || (linked == 1)){ taskList[i].counter = 0; //disable this task until it's reset if(taskList[i].command[OPCODE] == WAIT_EVENT){ //determine start of next group next = get_next_task_group(i); //returns 0 if there are no more groups taskList[i].command[WAIT_INDEX] = i; //when this WAIT event is complete, it will write this value into the ready queue //store }else{ next = (i+1) % NUMBER_TASKS; //update linked status linked = taskList[i].linkflag; //update if((linked == 0) && (taskList[i].reload == 1)){ // last task in this group (or not linked at all). Start reset if needed reset_task(i); } } //execute_command(&taskList[i].command); //run this task }else{ next = (i+1) % NUMBER_TASKS; } }while(next != 0); //enable sw timer }
// // flash PORTD.5 at 1hz // void task7(void) { PORTD ^= (1<<5); task_timers[7] = 50; //every 500ms reset_task(7); }
// // flash PORTD.4 at 2hz // void task6(void) { PORTD ^= (1<<4); task_timers[6] = 25; //every 250ms reset_task(6); }
void task5(void) { reset_task(5); }
void task4(void) { reset_task(4); }
void task3(void) { reset_task(3); }
void task2(void) { reset_task(2); }
void task1(void) { reset_task(1); }
void task0(void) { reset_task(0); }