Gast
#560654
Hallo zusammen, ich bräuchte mal eure Hilfe bei der vereinfachung des angehängten Terms. Der ist ziemlich lang und vieleicht hat jemand von euch ne Idee, wie man das etwas verkürzen kann. Gruß
|
Anzeige
|
Vereinfachung des Terms
Gast
#560654
Hallo zusammen, ich bräuchte mal eure Hilfe bei der vereinfachung des angehängten Terms. Der ist ziemlich lang und vieleicht hat jemand von euch ne Idee, wie man das etwas verkürzen kann. Gruß
Gast
#560661
Mit einer Look-Up-Tabelle? Eine erste Möglichkeit zur Verkürzung, ohne das grundsätzliche System zu verändern, könnte so aussehen:
Eine andere Möglichkeit wären Tabellen, in denen die Werte abgelegt werden.
Gast
#560669
Hallo, treten nur diese beschriebenen Zustände bei 'delay3' auf oder gibt es noch andere? Um die Sache flüssiger zu machen solltest du else-if oder switch-case verwenden. Denn jedes mal die ganze Latte if's durchzustepen macht keinen Sinn. Kannst du es vllt so mauscheln, dass du bei gradzahahligen 'delay3' einheitlich den Pin setzt/löschst; dann wäre eine Variante mit Modulo praktikabel. pumpkin
Gast
#560672
Hallo,
ich würde da eine switch anweisung nehmen
in etwa so :
void blaulicht () {
if(Blau == 0xBB) {
switch (delay3) {
case 2:
case 28:
PORTC &= ~(1 << PC3);
break;
case 3:
case 29:
PORTC |= (1 << PC3);
break;
}
}
}
die anderen Werte halt entsprechend dazu.
Eckhard
> Eine andere Möglichkeit wären Tabellen, in denen die Werte > abgelegt werden. Könnte zb so aussehen
Eventuell gibt es auch eine Möglichkeit diese "magischen Zahlen" mit einer Formel auszudrücken, etc... Da ja immer im nächsten Zyklus die Pins 1 gesetzt werden, ginge es verkürzt so:
Peter
Gast
#560682
Super, vielen Dank für die schnellen Antworten! @Karl Heinz: Welche Routine ist den schneller, die Switch/Case oder die mit der Tabelle? Andy wrote: > @Karl Heinz: Welche Routine ist den schneller, die Switch/Case oder die > mit der Tabelle? Dürfte für ein Blinklicht sowas egal sein, denn Blinkfrequenzen im MHz-Bereich sieht eh keiner mehr. Peter
Gast
#560694
Für die Blinkgfrequenz ist das egal, nur meinem Interrupt der Signale im unteren µs-Bereich erzeugen soll eventuell nicht.... Daher die Frage.... Aus dem Bauch heraus ist die switch case wahrscheinlich schneller.
Gast
#560773
Das ganze sieht ein wenig so aus, als ob Blaulicht() von einem Timer-Interrupthandler aufgerufen würde, in dem delay3 jedesmal inkrementiert wird (oder vielleicht ist delay3 sogar der Timer-Wert selbst). Wenn dies so ist, kannst du die Abfragen enorm beschleunigen, indem du delay3 immer nur mit den nächsten Wert vergleichst, bei dem eine Aktion stattfindet. Für den am häufigsten auftretenden Fall, bei dem delay mit keiner der vorgegebenen Konstanten übereinstimmt, kann damit die Anzahl der notwendigen Vergleiche von 20 (deine und Karl Heinzs Lösung) bzw. 9 (Peters Lösung) auf 1 reduziert werden. Und auch in den anderen Fällen hält sich der Rechenaufwand in akzeptablen Grenzen. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|