www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei C Schleife


Autor: Mirko Kleber (hagbart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

habe folgendes Problem und zwar möchte ich mit dem Webserver von Radig 
(Softwareversion 1.4) eine Mail Zeitlich versenden.

Nun habe ich mir folgenden Code überlegt.Er vergleicht die Sek und die 
Minuten mit einander bei ersreichen von 00s und 20min soll er die 
Schleife durchlaufen.

Doch leider über geht er bei erreichen der Zeit die If Schleife.

Woran könnte das liegen?


signed char Zyklus = 10;  //Variable für späteres Schleifenintervall
struct time current_time;
gettime(ActualTime, &current_time);
if ((Mail_Trigger_Enable) && (current_time.second >= 00) && 
(current_time.minute == 19 ) || (current_time.minute == 20 ));
{
if (mail_state == 1)  // Standtart 0 für keinen versand getriggert
{
if (vars.type_int[MAILFLAGS_ADDR] != 0)
{
cli();
printf("MailTrigger\n");
sendmail(packet, 0);
sei();
mail_state = 1;
}
} else     // versand wurde getriggert
{
if (vars.type_int[MAILFLAGS_ADDR] == 0) mail_state = 0;
}
}

Vielen Dank für eure Hilfe Mirko

Autor: andreas kasper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if ((Mail_Trigger_Enable) && (current_time.second >= 00) &&
(current_time.minute == 19 ) || (current_time.minute == 20 ));

du solltest den ";" nach dem if weggeben

außerdem würde ich die oder-bedingung noch in eine klammer kapseln.

if ((Mail_Trigger_Enable) && (current_time.second >= 00) &&
( ( current_time.minute == 19 ) || (current_time.minute == 20 ) ) )

lg
andi

Autor: Klugscheißer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir dein Problem zwar nicht näher angesehen...

Aber was mir auf jeden Fall sofort ins Auge stach
ist diese neue Variante in der Schreibweise von >Standard<

Zitat: "Standtart"

Da schüttelts den Compiler wahrscheinlich genauso wie mich ;-)

Was ist an dem Wort eigentlich so schwierig, dass es in jedem
zweiten Post mit "t" am Ende geschrieben wird?

Nichts für ungut und nicht böse sein...

Autor: fieser, klugscheissender Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>"Standtart"

Sieht aus wie "Schandtat"...

Es wird komplett ohne "t" geschrieben...

Autor: Klugscheißer 2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt keine If-Schleife.

Autor: fieser, klugscheissender Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>If Schleife.

Das ist keine Schleife (ausser, wenn man noch ein "goto" irgendwo 
einfügt, das auf den Anfang der ABFRAGE einen Sprung verursacht.)

>if ((Mail_Trigger_Enable) && (current_time.second >= 00) &&
(current_time.minute == 19 ) || (current_time.minute == 20 ));

Da fehlt ein Klammernpaar. Wo, verrate ich aber nicht!

Autor: Andre S. (dg2mmt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie der zweite Poster schon schrieb: das ";" nach der if-Bedingung 
beendet die if-Schleife direkt nach der Bedingung, das nachfolgend in 
Klammern gekapselte gehört nicht mehr zum if.

Autor: fieser, klugscheissender Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>if-Schleife

ABFRAGE! Schleifen haben etwas wiederholendes!

Autor: Andre S. (dg2mmt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast ja recht. :)

Aber wie heist das dann, was aufgrund der Abfrage ausgeführt wird?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergleich, Entscheidung, Abfrage.
Such dir was aus.
Das Wesen einer Schleife liegt nun mal darin, dass
Dinge wiederholt werden. Und das ist bei einem if nun
mal nicht der Fall. Ein if wählt einen von 2 möglichen
Programmpfaden aus.

Autor: Dr.Oettker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was ist an dem Wort eigentlich so schwierig, dass es in jedem
> zweiten Post mit "t" am Ende geschrieben wird?

Die Standart kann durch argaiV(*) deutlich verbessert werden.

(*) bitte rumdrehen. Richtig rum lässt mich das Forum die Nachricht 
nicht abschicken.

Autor: Mirko Kleber (hagbart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke ersteinmal für eure Hilfe, (und für die kleine 
Rechtschreibstunde:-))

habe eine elegantere Lösung gefunden.

Und zwar gibt es in der Software Delay Befehle und die habe ich einfach 
eingebaut und siehe da es geht.
Manchmal muss halb etwas genauer hinschauen.

Hier noch mein Code, vielleicht hilft es jemanden weiter:

Kann mir nur noch jemand sagen wie ich da Problem umgehe, daß jedesmal 
wenn ich den Server neueinschalte eine Mail verschickt wird?

if ((Mail_Trigger_Enable) && (CheckDelay_sec(MAIL_Timer)))
      {
        if (mail_state == 0)             {
             if (vars.type_int[MAILFLAGS_ADDR] != 1)
            {

        cli();
           printf("MailTrigger\n,%");
        sendmail(packet, 0);
        sei();
        MAIL_Timer = SetDelay_sec(120);
        mail_state = 1;
            }
           } else     // versand wurde getriggert
           {
          if (vars.type_int[MAILFLAGS_ADDR] == 0) mail_state = 0;
           }
      }

Danke für eure Hilfe Mirko

Autor: fieser, klugscheissender Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann mir nur noch jemand sagen wie ich da Problem umgehe, daß jedesmal
>wenn ich den Server neueinschalte eine Mail verschickt wird?

Pack deinen Mailversand an den Programmanfang...

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.