Simple Task Scheduler. For the moment only implements continuous running tasks and periodic tasks.

Example

two blinking leds

#include "mbed.h"

#include "task_scheduler.h"

Serial pc(USBTX, USBRX);        // tx, r

class Foo {
  DigitalOut myled1;
  int counter;

  public:
    Foo(void) :myled1(LED1) { counter = 0; }

    void alive_task(void) {
      if (counter++ % 30000 == 0) {
        myled1 = !myled1;
      }
    }
};

class Bar {
  DigitalOut myled2;

  public:
    Bar(void) :myled2(LED2) {}

    void control_task(void) {
      myled2 = !myled2;
    }
};

int main() {

    Foo foo;
    Bar bar;

    SimpleTaskScheduler::TaskScheduler scheduler;
    scheduler.create_continuous_task(&foo, &Foo::alive_task);
    scheduler.create_periodic_task(&bar, &Bar::control_task, 1);

    while(1) {
      scheduler.update();
    }
}

Revision:
3:bd96023168df
Parent:
2:1d20f2b3c788
--- a/task_scheduler.h	Wed Jul 13 09:01:16 2016 +0000
+++ b/task_scheduler.h	Tue Dec 13 14:48:48 2016 +0100
@@ -1,7 +1,7 @@
 #pragma once
 
 #include <vector>
-#include "task.h"
+#include "continuous_task.h"
 #include "periodic_task.h"
 
 // Definition of template methods need to be inside header file.
@@ -20,20 +20,22 @@
 
     public:
       void update(void);
+      void stop_task(unsigned int id);
+      void start_task(unsigned int id);
 
     public:
-      template<typename T> int create_continuous_task(T* object, void (T::*method)(void)) {
-        Task * task = new Task(object, method);
+      template<typename T> unsigned int create_continuous_task(T* object, void (T::*method)(void)) {
+        Task * task = new ContinuousTask(object, method);
         return add_task(task);
       }
 
-      template<typename T> int create_periodic_task(T* object, void (T::*method)(void), float period_seconds) {
+      template<typename T> unsigned int create_periodic_task(T* object, void (T::*method)(void), float period_seconds) {
         Task * task = new PeriodicTask(object, method, period_seconds);
         return add_task(task);
       }
 
     private:
-      int add_task(Task * task);
+      unsigned int add_task(Task * task);
   };
 
 };