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.
(Bitte nicht nach Logik in loopAndGetDelay() suchen )