www.mikrocontroller.net

Forum: Compiler & IDEs Lange if Anweisung auch als case ?


Autor: Tobias Tetzlaff (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

im Anhang habe ich eine für mich sehr komische if Verzweigung genutz.

Geht das evtl. leichter, übersichtlicher oder sogar mit einer case
Anweisung ?

Wenn "Tick" zwischen zwei Werten liegt, dann ....?

Desweiteren würde ich gerne wissen, od die Schreibweise der einzelnen
Bit-setzen-löschen so ok ist.
Und was ist mit den Definitionen im IO Init?

Danke für Euere Hilfe !!!

Gruß Toby

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich weurde es generell ein bischen anders machen.

Erhoehe nur die Timer0_Cnt variable (bei dir Tick) .... Bei erreichen
einer gewissen Zeit setzt du ein FLAG.... Das Flag fragst du im
Hauptprg ab.

Hier mal ein kleines Beispiel:

SIGNAL(SIG_OVERFLOW1)
{
  timer1cnt++;
  if(!(timer1cnt%20))
  {
    event = EV_KEYSCAN;
    nKeyTime++;
  }
  if(!(timer1cnt%70))
  {
    event = EV_LCDREFRESH;
  }
}

Main z.B. so :


int main(void)
{
  timer0_init;
  sei();
  switch (event)
  {
     case EV_KEYSCAN: scankey();
                      break;
     case EV_LCDREFRESH: refresh();
                         break;
  }


Mfg
Dirk

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da Du nicht auf Gleichheit mit Konstanten überprüft, kann Dir ein
switch/case-Statement nicht helfen.

Etwas übersichtlicher würde das ganze durch Verwendung einiger returns
und Weglassen vermutlich unnötiger Vergleiche, oder ist beabsichtigt,
daß bei Tick==4, 29 & 34 die Funktion gar nichts macht? Ich vermute
mal, daß Du da irgendwie mit dem else durcheinandergekommen bist.

Außerdem ist der Vergleich if (Tick > 255) ohne Funktion, da tick ein
uint_8 ist.
Zuletzt noch sollte Tick initialisiert werden.

Sieh' Dir mal das hier an:

SIGNAL(SIG_OVERFLOW0)
{
  static uint8_t Tick = 0;
  Tick++;

  if (Tick < 5)
  {
    PORTB |= ((1<<MEINBIT0));
    return;
  }

  if (Tick < 30)
  {
    PORTB &= ~((1 << MEINBIT0));
    return;
  }

  if (Tick < 35)
  {
    PORTB |= ((1<<MEINBIT0));
    return;
  }

  PORTB &= ~((1 << MEINBIT0));
}

Autor: Axos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Toby!

>>Wenn "Tick" zwischen zwei Werten liegt, dann ....?
Meinst du so ne Schreibweise ? Is auf jeden Fall übersichtlicher.

if (Tick < 5)
  PORTB |= ((1<<MEINBIT0));
else if (Tick > 5 && Tick < 30)
  PORTB &= ~((1 << MEINBIT0));
else if (Tick > 30 && Tick < 35)
  PORTB |= ((1<<MEINBIT0));
else if (Tick > 35)
  PORTB &= ~((1 << MEINBIT0));

Das Gegenteil von && (AND) ist || (OR).

MfG Axos

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
und vielen dank für euere Hilfe.

Ich habe erstmal Rufus Version eingesetzt.
Damit bin ich scho sehr zufrieden.

Die Flag Variante finde ich auch sehr Intressant,
aber dazu muß ich mich erstmal weiter mit einzelnen Bits und Flöags
beschäftigen.

Axos, dir auch vielen dank.

Mir ging es um eine übersichtliche Schreibweise,

die habe ich nun, Danke !!

Gruß Toby

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.