- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: einfaches multitasking mit arduino

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    aha, danke
    Zitat Zitat von i_make_it;
    Werden es dann mal mehr als zwei Tasks, wird dieser Codeteil natürlich umfangreicher oder man lässt ihn halt weg.
    bedeutet, man muss dann von den vorhandenen tasks mit einer verschachtelten if/then/else abfrage den task mit der kürzesten wartezeit finden und die ist dann das nächste "nextMinWakeUp". Spielen die anderen dann noch eine rolle? Ok, ich denke nein, weil ja die kürzeste wartezeit bei jedem durchlauf von loop neu berechnet wird...
    gruß inka

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    inka,
    du kannst diese Rechenspielerei getrost weglassen.
    Bei den AVRs bringt ein delay keinerlei Vorteile, da hier kein Sleep-Mode aktiviert wird, der Energie sparen könnte (selbst im Due Code wird das nicht gemacht).

    Sinnvoller wäre es, wenn du mal das Schlüsselwort "static" und dessen Funktion nachliesst und dann mal die ganzen globalen Variablen elemenieren würdest. Dann wird dein Code im Laufe der Zeit übersichtlicher und damit lesbarer.

    Meine 2cent

    botty

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Hi inka,

    in die Richtung hab ich auch mal was gebastelt, um die Sketches mit mehreren gezeiteten Aufgaben übersichtlich zu halten:
    Code:
    #include "SimpleTimerMillis.hpp"
    using Timer = SimpleTimerMillis;
    #define SEC *1000
    
    void taskA() {
       static Timer t(2 SEC, Timer::FOREVER, Timer::START_IMMEDIATELY);
       if(t.elapsed()) Serial.println("TaskA");
    }
    
    void taskB() {
       static Timer t(0.4 SEC, Timer::FOREVER, Timer::START_IMMEDIATELY);
       if(t.elapsed()) Serial.println("TaskB");
    }
    
    void setup() { 
      Serial.begin(9600);
    }
    
    void loop() {
      taskA();
      taskB();
    }
    Die Mini-Bibliothek dazu:
    Code:
    #ifndef __SIMPLETIMER__
    #define __SIMPLETIMER__
    
    class SimpleTimerMillis {
    using millis_t = unsigned long;
    public:
      static const bool ONCE = false;
      static const bool FOREVER = true;
      static const bool START_IMMEDIATELY = true;
    
      SimpleTimerMillis() = default;
      SimpleTimerMillis(millis_t timeSpan, bool forever, bool start=false) 
        : timeSpan(timeSpan), isContinous(forever) {
          if(start) this->start();
      }
      void start() {
        startTime = millis();
      }
      void start(millis_t timeSpan) {
        this->timeSpan = timeSpan;
        start();
      }  
      bool elapsed() {
        bool elapsed = millis()-startTime > timeSpan;
        if(elapsed && isContinous) start();
        return elapsed;
      }
      bool isCountious() {
        return isContinous;
      }
      void once() { isContinous = false; }
      void forever() { isContinous = true; }
    private:
      bool isContinous = false;
      millis_t startTime = 0;
      millis_t timeSpan  = 0;
    };
    
    #endif //__SIMPLETIMER__

  4. #4
    HaWe
    Gast
    wenn es komplizierter wird, wird das mit den Timern höchst unübersichtlich und ineffizient.

    Daher gibt es ja auch für die AVR Arduinos MT-Libs:
    http://forum.arduino.cc/index.php?topic=347188.0
    http://www.rtos48.com/

    für den Due gibt es ja schon ewig die Scheduler Lib und auch Babix,
    https://www.arduino.cc/en/Reference/Scheduler
    http://forum.arduino.cc/index.php?topic=318084.0

    doch seit nicht allzulanger Zeit gibt es auch Scheduler-Libs für AVR:
    http://playground.arduino.cc/Code/Scheduler
    http://playground.arduino.cc/Code/TaskScheduler
    Geändert von HaWe (28.11.2016 um 21:56 Uhr)

Ähnliche Themen

  1. [Arduino Uno] - Multitasking und Serielle Befehle
    Von neo3000 im Forum Arduino -Plattform
    Antworten: 8
    Letzter Beitrag: 17.04.2011, 10:04
  2. Multitasking Projekt
    Von Osser im Forum Asuro
    Antworten: 26
    Letzter Beitrag: 14.03.2008, 14:24
  3. Multitasking für den Asuro (II)
    Von Giwo im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 27.12.2006, 08:23
  4. Multitasking
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 44
    Letzter Beitrag: 22.06.2006, 16:18
  5. Multitasking
    Von FancanTeik im Forum Software, Algorithmen und KI
    Antworten: 11
    Letzter Beitrag: 25.04.2005, 08:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen