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

Re: Programmierproblem?!? Kategorie: Programmierung (von krassos - 1.09.2005 22:23)
Als Antwort auf Programmierproblem?!? von Markus - 1.09.2005 21:30
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, OSOPT V3.0
> Hallo!!
> Ich habe ein kleines Programmierproblem, vielleicht hat einer eine Gute Idee!!
> Und zwar muss ich auf einen Tastendruck eine bestimmte Aktion ausführen. Vorher habe ich gewählt
> ob sie ständig oder einmalig ausgeführt werden soll! (Dieses habe ich in einer Variablen, entweder 1
> oder 2!)
> nun kommt mein Tastendruck (Port10) und die Schleife soll durchlaufen, einmalig halt nur einmal und
> ständig so oft bis ich wieder drücke!

Hallo,

dazu fällt mir spontan mal eben dieses Konstrukt ein:
(es sollte sogar funzen)


int staendig,hilfsmerker1,hilfsmerker2,taste;
// staendig=0   ist einmal ausfĂĽhren , staendig = 1 ist dauernd ausfĂĽhren

if taste and ! hilfsmerker
   {
   if staendig
      {
      hilfsmerker2 = hilfsmerker2 xor -1  //status von hilfsmerker umschalten
      }
   else
      {
      aufruf.funktion();
      }
   hilfsmerker = taste;
   }

if hilfsmerker2 aufruf.funktion();




>
> Wie bekomme ich dieses wohl hin und vorallem wie frage ich den Taster beim 2. drĂĽcken (also Stopp)
> nochmal ab wen die Schleife z.B. 10 Sekunden dauert? Ich möchte ja nicht bis zu 10 Sekunden den
> Taster gedrĂĽckt halten bis z.B. dieser in meiner Schleifenbedingung abgefragt wird....

Das oben gezeigte Konstrukt sollte genau das beschriebene Problem lösen.
Einen PferdefuĂ? gibt es allerdings:
Wenn Du sleep - Programmierer bist bekommst Du genau das von Dir schon
erkannte Problem mit den z.B. 10 sek.
Hier hilft konsequentes vermeiden von sleep in diesem Thread und den aufgerufenen
Funktionen, zumindest wenn diese ĂĽber ein paar Millisekunden liegen.
Stattdessen lä�t sich ein Timer programmieren, der auf dem Systemtimer basiert.
Dadurch läuft Dein Thread sehr schnell ab. Wenn Du jetzt eine verzögerte Funtion in dem Thread brauchst,
legst Du den Thread nicht schlafen, sondern setzt einen Timer und fragst diesen in jedem Zyklus
ab auf seinen Status.

Dadurch kann Dein Thread auch viel mehr Aufgaben erledigen, da er immer mit voller Geschwindigkeit
abläuft.

GruĂ? krassos


    Antwort schreiben


Antworten:

Re: Programmierproblem?!? (von Frank - 2.09.2005 21:20)
    Re: Programmierproblem?!? (von krassos - 3.09.2005 7:42)