| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /**
- * This is a test of TaskScheduler layered priority funtionality
- *
- * Current test employs three priority layers:
- * Base scheduler runs tasks t1, t2 and t3
- * High priority scheduler runs tasks t4 and t5
- * Highest priority scheduler runs tasks t6 and t7
- *
- * Sequence of task scheduling (not execution!) is:
- * 6, 7, 4, 6, 7, 5, 1, 6, 7, 4, 6, 7, 5, 2, 6, 7, 4, 6, 7, 5, 3 = one base scheduler pass
- *
- * Scheduling overhead (at 20 micros per one pass) is: (B + B * H + B * H * C) * T = (3 + 3 * 2 + 3 * 2 * 2) * 18 = 378 micros
- * where
- * B - number of tasks in the base scheduler's chain
- * H - number of tasks in the high priority scheduler's chain
- * C - number of tasks in the critical priority scheduler's chain
- * T - scheduling overhead for 1 pass (~15-18 microseconds)
- *
- * Actual task execution order:
- Scheduler Priority Test
- Task: 600: 0 Start delay = 0
- Task: 700: 10 Start delay = 10
- Task: 40: 21 Start delay = 21
- Task: 50: 31 Start delay = 31
- Task: 1: 43 Start delay = 41
- Task: 2: 53 Start delay = 53
- Task: 3: 63 Start delay = 63
- Task: 600: 500 Start delay = 0
- Task: 40: 510 Start delay = 10
- Task: 600: 1000 Start delay = 0
- Task: 700: 1010 Start delay = 10
- Task: 40: 1021 Start delay = 21
- Task: 50: 1032 Start delay = 32
- Task: 1: 1043 Start delay = 43
- Task: 600: 1500 Start delay = 0
- Task: 40: 1510 Start delay = 10
- Task: 600: 2000 Start delay = 0
- Task: 700: 2011 Start delay = 11
- Task: 40: 2022 Start delay = 22
- Task: 50: 2032 Start delay = 32
- Task: 1: 2043 Start delay = 43
- Task: 2: 2054 Start delay = 54
- Task: 600: 2500 Start delay = 0
- Task: 40: 2510 Start delay = 10
- Task: 600: 3000 Start delay = 0
- Task: 700: 3010 Start delay = 10
- Task: 40: 3021 Start delay = 21
- Task: 50: 3032 Start delay = 32
- Task: 1: 3043 Start delay = 43
- Task: 3: 3053 Start delay = 53
- Task: 600: 3500 Start delay = 0
- Task: 40: 3510 Start delay = 10
- Task: 600: 4000 Start delay = 0
- Task: 700: 4011 Start delay = 11
- Task: 40: 4022 Start delay = 22
- Task: 50: 4032 Start delay = 32
- Task: 1: 4043 Start delay = 43
- Task: 2: 4054 Start delay = 54
- Task: 600: 4500 Start delay = 0
- Task: 40: 4510 Start delay = 10
- Task: 600: 5000 Start delay = 0
- Task: 700: 5010 Start delay = 10
- Task: 40: 5021 Start delay = 21
- Task: 50: 5031 Start delay = 31
- Task: 1: 5043 Start delay = 43
- Task: 600: 5500 Start delay = 0
- Task: 40: 5511 Start delay = 11
- Task: 600: 6000 Start delay = 0
- Task: 700: 6010 Start delay = 10
- Task: 40: 6022 Start delay = 22
- Task: 50: 6032 Start delay = 32
- Task: 1: 6043 Start delay = 43
- Task: 2: 6053 Start delay = 53
- Task: 3: 6065 Start delay = 65
- */
-
- #define _TASK_SLEEP_ON_IDLE_RUN
- #define _TASK_PRIORITY
- #define _TASK_WDT_IDS
- #define _TASK_TIMECRITICAL
- #include <TaskScheduler.h>
- Scheduler r;
- Scheduler hpr;
- Scheduler cpr;
- // Callback methods prototypes
- void tCallback();
- // Tasks
- Task t1(1000, TASK_FOREVER, &tCallback, &r); //adding task to the chain on creation
- Task t2(2000, TASK_FOREVER, &tCallback, &r);
- Task t3(3000, TASK_FOREVER, &tCallback, &r);
- Task t4(500, TASK_FOREVER, &tCallback, &hpr); //adding task to the chain on creation
- Task t5(1000, TASK_FOREVER, &tCallback, &hpr); //adding task to the chain on creation
- Task t6(500, TASK_FOREVER, &tCallback, &cpr); //adding task to the chain on creation
- Task t7(1000, TASK_FOREVER, &tCallback, &cpr); //adding task to the chain on creation
- void tCallback() {
- Scheduler &s = Scheduler::currentScheduler();
- Task &t = s.currentTask();
-
- Serial.print("Task: "); Serial.print(t.getId());Serial.print(":\t");
- Serial.print(millis()); Serial.print("\tStart delay = "); Serial.println(t.getStartDelay());
- delay(10);
- if (t.getId() == 3) Serial.println();
- }
- void setup () {
- Serial.begin(115200);
- Serial.println("Scheduler Priority Test");
- t4.setId(40);
- t5.setId(50);
-
- t6.setId(600);
- t7.setId(700);
- r.setHighPriorityScheduler(&hpr);
- hpr.setHighPriorityScheduler(&cpr);
- r.enableAll(true); // this will recursively enable the higher priority tasks as well
- }
- void loop () {
-
- r.execute();
-
- }
|