Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Unterbrechungszeiten durch Windows verkürzen ??

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pianoman



Anmeldungsdatum: 28.10.2008
Beiträge: 5

BeitragVerfasst am: 29.10.2008, 00:27    Titel: Unterbrechungszeiten durch Windows verkürzen ?? Antworten mit Zitat

Guten Tag,

mich stören die die sporadischen Programmunterbrechungen durch Windows-XP bei einer zeitkritischen Programmschleife in FreeBasic.
Die mit dem Timer gemessene Durchlaufzeit liegt bei nominal ca. 0,3 ms. Sie verlängert sich aber durch die Windows-Interrupts leider sporadisch auf bis zu 70 ms.
Gibt es eine Möglichkeit diese unerwünschten Unterbrechungen auf z.B. 5 - 10 ms zu verkürzen? Wenn sie dafür öfters auftreten, würde mich das bei meiner Anwendung weniger stören.

Vielen Dank im Voraus und
Grüsse von Pianoman
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 29.10.2008, 00:36    Titel: Antworten mit Zitat

Nein. Nutze DOS oder ein anderes RealTime Betriebssystem mit ausschliesslich einem Thread. Nämlich deinem eigenen.

Es ist leider unumgänglich das Betriebssysteme mit Mehreren Threads unterbrochen werden müssen, um auch anderen Threads etwas zeit zur Verfügung zu stellen.

Oder schreib dir selbst eines: http://www.freebasic-portal.de/index.php?s=projekt&id=26


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pianoman



Anmeldungsdatum: 28.10.2008
Beiträge: 5

BeitragVerfasst am: 29.10.2008, 10:28    Titel: Antworten mit Zitat

Danke für deine Antwort.
In meinem Programm spreche ich über USB einen Joystick an (über Gameport Adapter). Geht das überhaupt mit FreeBasic für DOS ?
Oder sollte ich auf Visual Basic umsteigen um CPU-Zeit in kürzeren Abständen anzufordern ?
Gruss pianoman
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 29.10.2008, 10:44    Titel: Antworten mit Zitat

das was du mit VB schreiben kanst, kannst duauch mit FB schreiben. Wenn du "nur" mehr zeit brauchst,könntest du alternativ die ThreadPriority höher schrauben, aber das ist immer noch kein RealTime. Windows unterbricht immernoch deinen Prozess, auch wenn die abstände kürzer werden.

was bitte möchtest du den via USB machen, das sooo zeitkritishc ist?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.10.2008, 11:37    Titel: Antworten mit Zitat

solange du getjoystick verwendest (oder wie der befehl hieß) und der passende treiber installiert ist und es den befehl auch in FBDOS gibt, kannst du damit auch den joystick abfragen. beachte aber, dass es in MS-DOS keinen USB-Support gibt. FreeDOS hat glaub ich welchen. aber spiele für dos schreiben lohnt sich eh nicht. Zunge rausstrecken
In diesem Fall ist eher dein code schlecht designt, denn ein Spiel sollte auch mit unterbrechnungen funktionieren.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
pianoman



Anmeldungsdatum: 28.10.2008
Beiträge: 5

BeitragVerfasst am: 29.10.2008, 11:42    Titel: Antworten mit Zitat

Ich möchte Impulse zählen, die von einer externen Quelle kommen. Diese speise ich an dem entsprechenden PIN eines USB-Gameport Adaptors ein.
Die Impulslänge beträgt ca. 10-15 ms und der minimale Impulsabstand beträgt ca. 100 ms.
In FB frage ich zyklisch den Joystick-Schalter (PIN am Stecker) ab und zähle so die eingehenden Impulse. Diese Programmschleife darf ruhig unterbrochen werden, aber eben nicht länger als ca. 10 ms, sonst werden Impulse "übersehen", bzw nicht gezählt.
Ein Realtime-System verlange ich doch nicht, aber die Unterbrechungen sollten halt nicht länger als 10 ms sein. Wie oft sie eintreten interessiert nicht!
Im Taskmanager von XP habe ich schon versucht die Priorität meines Programms von "Normal" auf "Hoch", oder auf "Echtzeit" zu stellen. Das reduziert zwar die längsten Unterbrechungen etwas, aber leider nicht genug.
Wenn ich in meine Schleife ein SLEEP 1 (Programmunterbrechung von 1 ms) einbringe, funktioniert es noch am besten.
Bevor ich z.B. auf VB umsteige, hätte ich halt gerne gewusst, ob man dort mehr Einfluss auf das Multithreading hat.
MfG. pianoman
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 29.10.2008, 12:10    Titel: Antworten mit Zitat

Wie schon gesagt: Unter Windows funktioniert das nicht. Windows entscheidet selbst, wann es einem Thread die Zeitscheibe zuteilt. Darauf hast Du keinen Einfluß. "Echtzeit" bedeutet in Windows nur, daß Du zwischen einem Mausklick und der darauf folgenden Reaktion keine Zeitverzögerung siehst. Bei der natürlichen Trägheit des Auges kann das schon mal 20 ms ausmachen, und selbst das ist nicht immer gewährleistet. Je nachdem, was das System noch alles zu tun hat (Laufwerk ansprechen, Daten in Auslagerungsdatei schreiben z. B.) kann die Verzögerung sogar mehrere Sekunden dauern.

Gleiches gilt übrigens für die DOS-Box in älteren Windosen.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 29.10.2008, 12:52    Titel: Antworten mit Zitat

Zitat:
Bevor ich z.B. auf VB umsteige, hätte ich halt gerne gewusst, ob man dort mehr Einfluss auf das Multithreading hat.

Egal, ob du hier FB, VB, PB, Delphi, C/C++ oder was auch immer benutzt, es bleibt das Problem mit Windows mit den Augen rollen .
Du kannst mit entsprechenden API-Befehlen immer nur den gleichen (beschränkten) Einfluss darauf erzielen.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 29.10.2008, 16:57    Titel: Antworten mit Zitat

Treiber können Timeslice unabhängig agieren zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 29.10.2008, 23:11    Titel: Antworten mit Zitat

@pianoman

wie wäre es denn, wenn du dir einfach einen wirklich keinen AVR (24, 44, 64) oder was ähnliches, als zähler zusammen lötest, und den an deine Serielle schnitstelle klemmst?. Der Zählt sehr genau und Windows unabhängig. Die übertragung des messwertes erfolgt daraufhin zeitunkritisch. ( da kann schonmal ne sekunde vergehen, oder mehr, und deine Messwerte sind immernoch konstant).

Das Bauteil kostet dich 2 Euro, eventuell noch 1 oder 2 widerstände, und (da du nur eine Monodirectionelle verbindung brauchst (in eine richtung)), reicht auch ein einfacher pegelumsetzer aus einem transistor und nem widerstand aus. (Dein PC wird die 5V auch als HIGH, und die 0V als LOW erkennen, udn braucht nicht zwansläufig die +-12V, [zumindest die meisten]).

Andernfalls bleibst dir eventuell nur noch die möglichkeit einen Treiber zu schreiben, welcher einen Interrupt auf einen der vom Motherboard zur Verfügung gestellten Timer nutzt. Aber ich bezweifle auch hier den erfolg stark)

Die wohl einfachste udn nerfenschonenste Variante ist die nutzung des externen Zeitmessinstruments (klingt auch gleich professioneller, wenn man einen AVR als Zeitmessinstrument bezeichnet)


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz