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 - 21.12.2011 20:52)
Als Antwort auf Re: Thread's Starten von Rene Schulz - 18.12.2011 13:55
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Karl,

ich habe den Code mal etwas erweitert, jetzt weis ich
immer was die Stunde geschlagen hat ;)

Danke nochmal

GruÃ? Rene

> 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: