Просмотр исходного кода

Initial test of IDLE_POWER for Tennsies

Anatoli Arkhipenko 8 лет назад
Родитель
Сommit
d31a6abb6c
2 измененных файлов с 35 добавлено и 1 удалено
  1. 25 1
      src/TaskScheduler.h
  2. 10 0
      src/TaskSchedulerDeclarations.h

+ 25 - 1
src/TaskScheduler.h

@@ -156,7 +156,7 @@
  
 #ifdef _TASK_SLEEP_ON_IDLE_RUN
 
-#ifdef ARDUINO_ARCH_AVR  
+#ifdef ARDUINO_ARCH_AVR
 #include <avr/sleep.h>
 #include <avr/power.h>
 #endif  // ARDUINO_ARCH_AVR 
@@ -167,6 +167,10 @@ extern "C" {
 }
 #define _TASK_ESP8266_DLY_THRESHOLD 200L
 #endif  // ARDUINO_ARCH_ESP8266
+
+#ifdef  CORE_TEENSY 
+#include <Snooze.h>
+#endif
 #endif  // _TASK_SLEEP_ON_IDLE_RUN
 
 
@@ -522,6 +526,15 @@ Scheduler::Scheduler() {
     init();
 }
 
+Scheduler::~Scheduler() {
+#ifdef _TASK_SLEEP_ON_IDLE_RUN
+#ifdef CORE_TEENSY
+    delete config;
+	delete timer;
+#endif //CORE_TEENSY
+#endif // _TASK_SLEEP_ON_IDLE_RUN
+}
+
 /** Initializes all internal varaibles
  */
 void Scheduler::init() { 
@@ -533,6 +546,13 @@ void Scheduler::init() {
 #endif  // _TASK_PRIORITY
 #ifdef _TASK_SLEEP_ON_IDLE_RUN
     allowSleep(true);
+	
+#ifdef CORE_TEENSY
+	timer = new SnoozeTimer;
+	config = new SnoozeBlock(*timer);
+	timer->setTimer(1);
+#endif //CORE_TEENSY
+	
 #endif  // _TASK_SLEEP_ON_IDLE_RUN
 }
 
@@ -793,6 +813,10 @@ bool Scheduler::execute() {
       sleep_disable(); /* First thing to do is disable sleep. */
 #endif // ARDUINO_ARCH_AVR
 
+#ifdef CORE_TEENSY
+	Snooze.sleep(*config);
+#endif //CORE_TEENSY
+
 #ifdef ARDUINO_ARCH_ESP8266
 // to do: find suitable sleep function for esp8266
       t2 = micros() - t1;

+ 10 - 0
src/TaskSchedulerDeclarations.h

@@ -26,6 +26,9 @@
     #define _TASK_SCOPE  private
 #endif
 
+#ifdef CORE_TEENSY
+#include <Snooze.h>
+#endif //CORE_TEENSY
 
 #define TASK_IMMEDIATE          0
 #define TASK_FOREVER         (-1)
@@ -189,6 +192,7 @@ class Scheduler {
   friend class Task;
   public:
     Scheduler();
+	~Scheduler();
     void init();
     void addTask(Task& aTask);
     void deleteTask(Task& aTask);
@@ -216,6 +220,12 @@ class Scheduler {
     Task       *iFirst, *iLast, *iCurrent;        // pointers to first, last and current tasks in the chain
 #ifdef _TASK_SLEEP_ON_IDLE_RUN
     bool        iAllowSleep;                      // indication if putting avr to IDLE_SLEEP mode is allowed by the program at this time. 
+
+#ifdef CORE_TEENSY
+	SnoozeTimer *timer;
+	SnoozeBlock *config;
+#endif //CORE_TEENSY
+
 #endif  // _TASK_SLEEP_ON_IDLE_RUN
 #ifdef _TASK_PRIORITY
     Scheduler  *iHighPriority;                    // Pointer to a higher priority scheduler