Programme Leitung Oszilloskop seriell0 NetzHW_seriell Morsen Senden/Empfangen RS232 Terminal3 Terminal4 Fehlerkorrektur Threads CTS-Interrupt Routing Socket-Programmierung Timer Java Spiel
Pfad: Startseite / Fächer / Informatik / Netze / Programme / CTS-Interrupt
Autor: mk
18.10.2006 16:46
1471
CTS-Interrupt

'Communication Event' zur Flankenentdeckung

Vorab: Es hat sich herausgestellt, dass Starten und Stoppen eines Threads für die Kollisionserkennung anscheinend zu langsam ist! Für andere Gelegenheiten kann es nützlich sein, Polling durch eine Interruptbehandlung zu ersetzen.

GUI zur Flankenentdeckung NetzHwEreignis.zip

Quelltext-Auszug

....
type
  TEreignisThread = class(TThread)
    private
      port : integer;
    public
      procedure execute; override;
      procedure setPort(pHandle : integer);
      procedure update;
  end;

  TForm1 = class(TForm)
   ....
  private
    NetzHW  : TNetzHW;
    monitor : TEreignisThread;
    procedure updateLed;
  public
    { Public-Deklarationen }
  end;

  .....

procedure TEreignisThread.execute;
var
  dummy : dword;
begin
  while not Terminated do
  begin
    if WaitCommEvent(port,dummy,nil)
    then form1.updateLED; //synchronize(update);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  NetzHW := TNetzHW.Create;
  netzHW.Start(1);
  updateLED;
  setCommMask(netzHW.GetHandle,EV_CTS);
  monitor := TEreignisThread.Create(true);
  monitor.FreeOnTerminate := true;
  monitor.setPort(netzHW.GetHandle);
  monitor.Resume;
end;

....