www.mikrocontroller.net

Forum: PC-Programmierung HI-Timer in VB6


Autor: E_D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forianer,
ich hoffe, einer von euch hatte schon selbiges Problem, und konnte es
lösen.
Über Jahre hinweg habe ich unter VB6 ein schönes Anwenderprogramm
entwickelt, welche die zu verarbeitenden Daten über die serielle
Schnittstelle bekommt. Dazu benutze ich einen Timer, das Unterprogramm
zyklisch aufzurufen, welches den Eingangspuffer pollt, und die
Datenframes zusammensetzt. Es ist nicht der Standard-Timer von
Microsoft, sondern HITIME.OCX von Mabry. D.h. mit dem kann ich bis zu
1ms-Interrupts auslösen. Ich benutze ihn bis etwa 10ms runter, je nach
Datenaufkommen an der seriellen.
Nun das Problem :
Unter Windows-ME läuft das ganze Super, ohne jegliches Problem.
Unter Windows-XP läuft es auch, nur das der HiTimer nach ca. 65000
Aufrufen des Unterprogramms stirbt, d.h. das Unterprogramm wird nicht
mehr aufgerufen. Der Rest des Programs, auch normale Standard-Timer
laufen weiter. Der HiTimer ist nur noch durch Re-Start des Programs
wieder zum Leben zu erwecken.

Ich habe versucht, vor dem 'kritischen' Zeitpunkt in den
Eigenschaften zu verändern, kurz anzuhalten, und wieder weiter laufen
zu lassen; nichts hilft.
Hat jemand ne' Idee ?

Danke und viele Grüße
ED

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, verwende Callbacks, Events, Interrupts oder wie auch immer das in VB
heisst

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist zwar etwas hart von Tobi ausgedrückt aber er hat recht.

Lass das Polling, auch schon zu Doszeiten hat man bei höheren
Datenraten den Interrupt benutzt.
Verlagere das Abholen der Zeichen in eine Eventroutine ,die aktiviert
wird wenn neue Zeichen ankommen. Setze dort den Frame zusammen und
aktiviere ein Event wenn du einen kompletten Frame hast.
Solltest du beim Polling bleiben wollen, so vergrößere den Puffer für
die serielle Schnittstelle und überlege dir wie schnell du auf einen
Frame reagieren willst. Vergiss dabei Zeiten unter 20ms das wird auf
diese Weise nur Problematisch. Im Puffer der Schnittstelle kann mehr
als ein Zeichen liegen und ich denke du wirst sehr schnell einsehen,
dass der Programmcode übersichtlicher wird wenn du das ganze
Eventbasiert machst.
Am besten wird es allerdings, wenn das ganze in einem eigenen Thread
läuft.

Autor: E_D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön für Eure Tips !
Werde jetzt am Wochenende mal sehen, was ich da machen kann.
Eins habe ich noch versucht, den Hitimer ausgetauscht gegen einen
normalen. Vom prinzip geht das ohne Absturz des Timer auch unter XP,
jedoch laufen mehr Zeichen ein, als so abgeholt werden können...
Mal schaeuen, wie man das per Interrupt löst.
Viele Grüße
ED

Autor: E_D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Problem lokalisiert :
Es hat den HiTimer anscheinend gestört, das ich in der eigenen
HiTimer-Subroutine die Intervalwerte geändert habe, ohne vorher den
HiTimer zu disablen...
VG ED

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.