Einzelnen Beitrag anzeigen

yogie

Registriert seit: 11. Sep 2003
Ort: bei Goslar
213 Beiträge
 
Delphi 6 Professional
 
#1

Threads und stack overflow bei Hardware am USB

  Alt 17. Mär 2019, 06:45
Hallo zusammen,
gleich zu Anfang: ich erwarte nicht dass mein Problem gelöst wird, es geht mir nur um eventuelle Tipps zum weiteren Vorgehen.

Folgende Situation
- ich verwende Delphi 6
- von 48 analogen Eingängen sollen Spannungen erfasst und aufgezeichnet werden
- es kommen 3 Interfaces der Fa. PICOTech (ADC-24) mit je 16 Kanälen zum Einsatz
- die Interfaces sind über USB (mit einem Hub) mit dem PC verbunden
- PICOTech stellt eine DLL zur Verfügung, mit der DLL können die handles der Interfaces abgefragt werden
- die Abfrage von je 16 Werten (ein Interface) dauert relativ lange (ca. 0,8 sec)
- in einer vom mir erstellten Thread-Klasse werden im Execute zyklisch 16 Werte eines Interface abfragt und in einem A/B Puffer ablegt
- Über die Thread-Sicherheit der DLL kann ich nichts sagen
- ich erstelle drei Instanzen der Thread-Klasse und versorge sie mit dem handle
- im Hauptprogramm läuft ein Timer der zyklisch die Puffer abfragt und die Werte anzeigt.
- das Hauptprogramm läuft ca. 3 Stunden und bricht dann mit einem Stack-Overflow ab. Dieser Effekt ist auf verschiedenen PCs mit versch. Windows-Versionen nachvollziebar.
- die Thread-Klasse war zunächst recht „naiv“ programmiert, dann habe ich mir überlegt, dass USB als eine gemeinsame Resurce geschützt werden sollte. Ich übergebe jetzt im Construtor allen drei Threads eine globale critical section, die ich vor der Verwendung des USB-Busses setze (enter) und nach der Abfrage der Werte wieder zurücksetze (leave). Das hat leider nichts gebracht,
- Den Zugriff auf den Puffer habe ich nicht geschützt, da vom Hauptprogramm nur gelesen wird, da bin ich mir schon unsicher ob das ok ist.
- die Wahrscheinlickeit für den stack overflow scheint zu steigen, wenn ich den Zyklus des Timers im Hauptprogramm verkürze. Eigentlich sind 0,5 s aussreichend, bei 100 ms kommt der overflow schon nach 30 Minten

Ich vermute der Stack-Overflow ist ein Folgefehler, habe aber keine Idee wie ich da weiterkomme. Trotz Wochenende bin ich für jeden Tipp dankbar.
Kompatibilität ist ein Euphemismus für n i c h t einhunderprozentige Austauschbarkeit
http://b-und-l-service.de/

Geändert von yogie (17. Mär 2019 um 06:51 Uhr)
  Mit Zitat antworten Zitat