Simultanität obwohl es keine gibt


#1

Hi, ich muss für einen Prozessor etwas simultan ausführen, obwohl es keine Simultanität gibt:

/*
   dummy
*/
void tueWas1() {
}

// --- CLASSES ---

class ATask {
  public:
    virtual void setup1() = 0;
    virtual int loopAndGetDelay() = 0;
};

class TaskA : public ATask {
  public:
    void setup1() {
      // declare...
    }
    int loopAndGetDelay() {
      // set...
      if (nr == 0)
        tueWas1();
      if (nr == 1)
        tueWas1();
      if (nr == 2)
        tueWas1();
      if (nr == 3) {
        tueWas1();
        tueWas1();
        tueWas1();
      }

      nr = (nr + 1) % 4;

      if (nr > 0) {
        // wait for 3000 milliseconds
        return 3000;
      } else {
        // wait for 30 milliseconds
        return 30;
      }
    }
  private:
    int nr = 0;
};

class TaskB : public ATask {
  public:
    void setup1() {
      // declare...
    }
    int loopAndGetDelay() {
      inputValue = 132; // read the value...
      if (inputValue > maxPot) {
        maxPot = inputValue;
      }
      if (inputValue < minPot) {
        minPot = inputValue;
      }
      // adjusting...
      if (inputValue > lastInputValue + 100 || inputValue < lastInputValue - 100) {
        lastInputValue = inputValue;
        // wait for 30 milliseconds
        return 30;
      } else {
        tueWas1();
        return 10000;
      }
    }
  private:
    int inputValue = 0; // variable to store the value
    int lastInputValue = 0;
    int maxPot = 5000;
    int minPot = 500;
};

// --- BEGIN ---

const int number_tasks = 2;

ATask* tasks[number_tasks] {
  new TaskA(),
  new TaskB()
};

int delays[number_tasks];

void setup_a() {
  for (int i = 0; i < number_tasks; i++) {
    tasks**->setup1();
    delays** = 0;
  }
}

void loop_a() {
  for (int i = 0; i < number_tasks; i++) {
    if (delays** <= 0) {
      delays** = tasks**->loopAndGetDelay();
    }
  }
  int minDelay = 60000; // zufaelliger Wert
  for (int i = 0; i < number_tasks; i++) {
    if (delays** < minDelay) {
      minDelay = delays**;
    }
  }
  if (minDelay > 0) {
    delay(minDelay);
    for (int i = 0; i < number_tasks; i++) {
      delays** -= minDelay;
    }
  }
}

Ist meine Vorgehensweise, ab BEGIN, richtig?
Bin für jeden Hinweis sehr dankbar. :wink:

(Bitte nicht nach Logik in loopAndGetDelay() suchen :wink: )


#2

Ein paar Links würden mir auch reichen…