- Akku Tests und Balkonkraftwerk Speicher         
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
    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

  2. #2
    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__

  3. #3
    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