AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Threads und stack overflow bei Hardware am USB
Thema durchsuchen
Ansicht
Themen-Optionen

Threads und stack overflow bei Hardware am USB

Ein Thema von yogie · begonnen am 17. Mär 2019 · letzter Beitrag vom 18. Mär 2019
 
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
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz