Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Thread's Starten Kategorie: Programmierung (von Rene Schulz - 18.12.2011 13:55)
Als Antwort auf Re: Thread's Starten von Karl - 4.12.2011 19:59
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Karl,

Danke für den Code, allerdings fängt der immer wieder von
vorn an die Eingaben zu Verlangen, habe schon alles
mögliche probiert, mit Eingabetaste nach dem Jahr zum Bsp.
und auch mit F2 zu Bestätigen etc. er springt am Ende
immer wieder zur Einstellung und verlangt erneut
die Eingabe von Datum etc.

Was mache ich da falsch?

GruÃ? Rene

> Hall Renee,
> tut mir leid dass ich länger nicht zugegen war,
> in der Tat sollte es so klappen. Wenn du immer noch den Code brauchst für das automatische
> einstellen der Zeit und des Datums nach neustart der station ohne sie am pc wieder an
> zu schliessen, hier ist mein code!
>
>
> thread main
>
> {
> stports.LCDlight(1);
> byte knopf, temp;
> int a, b, c;
> long timeset;
> lcdext.init();
> lcdext.clear();
>
>   lcdext.print("ZEIT EINSTELLUNG");
>     lcdext.line(2);
>     lcdext.print("BITTE  EINGEBEN");
>     sleep 2000;
>     lcdext.clear();
>     lcdext.print("     STUNDE     ");
>     sleep 2000;
>     lcdext.clear();
>     timeset=stkeyb.input (2, 2, 5000);
>     a=timeset;
>     lcdext.clear();
>     lcdext.print("     MINUTEN    ");
>     sleep 2000;
>     lcdext.clear();
>     timeset=stkeyb.input (2, 2, 5000);
>     b=timeset;
>     c=00;
>     system.settime(a, b, c);
>         lcdext.clear();
>     lcdext.print("DATE EINSTELLUNG");
>       lcdext.line(2);
>       lcdext.print("BITTE  EINGEBEN");
>       sleep 2000;
>       lcdext.clear();
>       lcdext.print("      JAHR      ");
>     sleep 2000;
>     lcdext.clear();
>     timeset=stkeyb.input (4, 4, 5000);
>     a=timeset;
>     lcdext.clear();
>     lcdext.print("  MONAT NUMMER  ");
>     sleep 2000;
>     lcdext.clear();
>     timeset=stkeyb.input (2, 2, 5000);
>     b=timeset;
>     lcdext.clear();
>     lcdext.print("      TAG       ");
>     sleep 2000;
>     lcdext.clear();
>     timeset=stkeyb.input (2, 2, 5000);
>     c=timeset;
>     lcdext.clear();
>     system.setdate(a, b, c);
>     lcdext.clear();
>     sleep 2000;
>     lcdext.print("DATE AND TIME");
>       lcdext.line(2);
>       lcdext.print("ERFOLGREICH");
>     sleep 2000;
>     lcdext.clear();
>
> ist bei mir im prinzip der mainthread. drunter habe ich nur noch threadstartbefehle...
>
> LG
>
> Karl
>
>
> > Hallo ihr beiden,
> >
> > vielen Dank für die Hilfe, habe es geändert und kann es aber
> > erst am Wochenende Testen.
> >
> > GruÃ? Rene
> >
> > > Hallo Rene,
> > >
> > > was Alfred meint ist, dass der thread main am Ende der Programmcodes stehen muss.
> > >
> > > Dein Programm sollte folgendermaÃ?en strukturiert sein:
> > > - globale Variablen
> > > - Funktionen
> > > - andere Threads
> > > - Thread main (aus dem die anderen Threads dann gestartet werden)
> > >
> > > GruÃ?
> > > Jörg
> > >
> > > > Hallo Alfred,
> > > >
> > > > was meinst Du mir "unter dem aufzurufenen"?
> > > > Der Thread der gestartet werden soll liegt unter den Mainthreadroutinen,
> > > > also der "run-Befehl" am Ende des Maintreads, aber so geht es halt nicht.
> > > > Allerdings kann ich in der Beschreibung auch nicht wirklich herauslesen wie
> > > > oder an welcher Stelle dieser Befehl korrekt angebracht wäre.
> > > >
> > > > GruÃ? Rene
> > > >
> > > > > Hallo Rene,
> > > > >
> > > > > bin selber noch Frischling, aber kann es sein das der Thread unter dem aufzurufenen liegt.
> > > > >
> > > > > GruÃ? Alfred
> > > > >
> > > > > > Hallo Jörg,
> > > > > >
> > > > > > Danke für deine Antwort.
> > > > > > Aber da kommt bei mir leider immer der Fehler
> > > > > > "unknown identifier", obwohl es den Thread gibt.
> > > > > >
> > > > > > GruÃ? Rene
> > > > > >
> > > > > > > Hallo Rene,
> > > > > > >
> > > > > > > einfach aus dem Thread Main heraus mit "run threadname;" starten:
> > > > > > >
> > > > > > > -Globale Variablen definieren (und initialisieren)
> > > > > > > thread main
> > > > > > > - diverse HW initialisieren
> > > > > > > - weitere threads starten
> > > > > > > - "loop" im main tread für alles was der tread im loop so abarbeiten soll
> > > > > > >    (bei mir nur "rudimentäre Grundfunktionen")
> > > > > > >
> > > > > > > Beispielcode auf meiner Haussteuerung:
> > > > > > >
> > > > > > >
> > > > > > > //------------
> > > > > > >   thread main
> > > > > > > //------------
> > > > > > >
> > > > > > > {
> > > > > > > //lokale Variablen
> > > > > > >   string s;
> > > > > > >   int secold;
> > > > > > >   int a;
> > > > > > > // Port Nibble auf Ausgang setzen
> > > > > > > ports.setn(3,0b1111); // Ausgang für LEDs dcferr 12, wechselblinkende LED 13+14
> > > > > > > // hwcom initialiseren und auf 19200 Baud einstellen
> > > > > > >   hwcom.init ();
> > > > > > >   hwcom.setspeed (hwcom.SPEED_19200);
> > > > > > > // PCF 8574 zurücksetzen und vorhandene Bausteine ausgeben
> > > > > > >    a=pcf.init();
> > > > > > >     s= "PCF auf:";
> > > > > > >     str.putmask(s,(a shr 8),'1','0');
> > > > > > >     str.putmask(s,a,'1','0');
> > > > > > >         hwcom.send(s,25);
> > > > > > >         hwcom.ret();
> > > > > > >         wait hwcom.ready();
> > > > > > > // DS 2482-800 initialisieren
> > > > > > >     if ds2482800.init(0)
> > > > > > >     {
> > > > > > >     s = "8Kanal 1-Wire Master gefunden";
> > > > > > >     hwcom.send(s,30);
> > > > > > >     hwcom.ret();
> > > > > > >     }
> > > > > > >     else
> > > > > > >     {
> > > > > > >     s = "8Kanal 1-Wire Master fehlt";
> > > > > > >     hwcom.send(s,26);
> > > > > > >     hwcom.ret();
> > > > > > >     };
> > > > > > > // RTC initialisieren
> > > > > > >     if pcf8583.init(1,1,1,0,0) // Init mit autosync PCF auf DCF
> > > > > > >     {
> > > > > > >     s= "RTC gefunden";
> > > > > > >         hwcom.send(s,12);
> > > > > > >         hwcom.ret();
> > > > > > >         wait hwcom.ready();
> > > > > > >     s= "Stellen der CC2 Uhr o.k.";
> > > > > > >         hwcom.send(s,24);
> > > > > > >         hwcom.ret();
> > > > > > >         wait hwcom.ready();
> > > > > > >         printtime();
> > > > > > >         hwcom.ret();
> > > > > > >      }
> > > > > > >     else
> > > > > > >         {
> > > > > > >         s= "RTC nicht gefunden !!!";
> > > > > > >         hwcom.send(s,22);
> > > > > > >         hwcom.ret();
> > > > > > >         wait hwcom.ready();
> > > > > > >         printtime();
> > > > > > >         hwcom.ret();
> > > > > > >         };
> > > > > > >
> > > > > > > {
> > > > > > > // Thread Rollladen starten
> > > > > > > run Rollladen;
> > > > > > > // Tread Terminal starten
> > > > > > > run terminal;
> > > > > > > // Thread Lüftung starten
> > > > > > > run lueftung;
> > > > > > > }
> > > > > > > loop
> > > > > > > {
> > > > > > > if secold != system.second(); // jede Sekunde 1 mal abarbeiten
> > > > > > > {
> > > > > > > secold = system.second();
> > > > > > > if secold %2 // Programmlaufanzeige (2 im Sekundentakt wechselnd blinkende LEDs)
> > > > > > > {
> > > > > > >  ports.set(14,0);
> > > > > > >  ports.set(13,1);
> > > > > > >  }
> > > > > > > else
> > > > > > >  {
> > > > > > >  ports.set(14,1);
> > > > > > >  ports.set(13,0);
> > > > > > >  };
> > > > > > >  if system.dcferr() ports.set(12,0); // Anzeige ob DCF77 Empfang (rote LED aus wenn o.k.)
> > > > > > >  else ports.set(12,1);
> > > > > > >   sleep 800;
> > > > > > >   };
> > > > > > > }
> > > > > > > }
> > > > > > >


    Antwort schreiben


Antworten:

Re: Thread's Starten (von Rene Schulz - 21.12.2011 20:52)