Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

ich habe folgendes problem.

ich habe eine schleife und möchte diese verlassen, wenn ich von einem board ein low-high-low signal per dip switch bekomme. mir geht es garnicht um die befehle um daten mit dem board auszutauschen. lediglich das verlassen der schleife, wenn der schalter von low auf high und dann von high auf low geschaltet wird, bereitet mir probleme. wäre nett wenn mir jemand helfen kann.

ja genau. aber mein problem ist, in was fuer einem konstrukt ich die flankenaenderung ueberpruefe

Das kommt darauf an, was Du von der Hardware für Signale bekommst und wie sie gesampled sind, denn Du musst ja passend die Signale abtasten, damit Du den Flankenwechsel korrekt findest. Ist die Abtastfrequenz zu hoch, bekommst Du ggf einen Flankenwechsel, der durch Rauschen verursacht wird, ist die Frequenz zu klein, siehst Du den Wechsel nicht.


while(!raus) //grosse hauptschleife

{

   if(dipswitch)

   {

      while(1)

      {

         if(!dipswitch)

         {

             raus=1;

             break;

         }

      }

   }

}

is das so ok?

ja, ich verstehe.

in dieser hauptschleife wird die ganze zeit ueberprueft ob sich die stellung der insgesamt acht schalter aendert. wenn sich ein schalter aendert wird der neue wert in eine variable uebernommen. beendet wurde die schleife sonst durch einen kbhit(). nun soll jedoch die schleife durch ein low high low signal vom achten schalter beendet werden. so ist die aufgabenstellung

Da Dein Code wenig aussagekräftig ist, kann man nicht viel dazu sagen. Ich meine Du hast nur zwei inernander geschachtelte Schleifen, ohne dass man z.B. etwas über die Typen der Variablen aussagen kann.

Wie schon gesagt, Du musst den Flankenwechsel detektieren und dazu musst Du eben entsprechende Infos über die Frequenzen und das Sampling haben. Das Board wird in irgendeiner Form die Dip-Schalter-Positionen an den Rechner übermitteln, diese musst Du entsprechend verarbeiten. Ohne genaue technische Spezifikation der Datenübertragung kann man nicht wirklich große Informationen liefern.

Je nach Schnittstelle musst Du ggf die Daten kontinuierlich verarbeiten, wobei Du dann in den Bereich des Echtzeitprozesses kommst bzw. Du musst eine Multithreading-Lösung entwickeln und die Daten ggf auch zwischen speichern, so dass Du auf sie innerhalb der Schleife zugreifen kannst.

ok...ich hätte vielleicht mal die schleife mit dem ganzen inhalt laden sollen.

hier ist sie.in iDIPswMirror ist immer der letzte wert der dipswitches gespeichert. in der schleife werden erst die aktuellen stellungen der dip-switches gelesen und in iDIPswA gespeichert. anschließend wird in der if-anweisung geprüft ob iDIPswA ungleich iDIPswMirror. wenn ja wird iDIPswMirror aktuallisiert und der status der dipswitches auf ein paar LEDs abgebildet. die LEDs befinden sich ebenfalls auf dem board. unterbrochen wird die schleife momentan durch ein kbhit(). sie soll aber unterbrochen werden wenn der achte dip-switch von low auf high und von high auf low geschaltet wird.


int iDIPswA, iDIPswMirror;


// Build DIP-Switch Status Mirror

outportb (CSCIR, PBDR); // Set IndexPtr. to IndexRegister A8h

iDIPswMirror= inportb (CSCDR); // Read IndexRegister A8h

enable ();


while (kbhit==0)

{


   // Read current DIP-Switch Status.

   disable ();

   outportb (CSCIR, PBDR); // IndexPtr.= A8h

   iDIPswA= inportb (CSCDR); // Read IndexRegister A8h

   enable ();


   // Compare current Status with last Status

   if (iDIPswA != iDIPswMirror)

   {

      // DIP-Switch Status change...

      iDIPswMirror= iDIPswA;

      printf ("\b\b%02x", iDIPswA & 0xff); // Update Msg.

      disable ();

      outportb (CSCIR, PADR); // Update LED´s

      outportb (CSCDR, iDIPswA & 0xff);

      enable ();

   }


}

ach so. ja die dip schalter werden per hand geschaltet

Bearbeitet von cable545

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.