WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Sleep / Pause in Matlab

 

Tobi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2012, 15:07     Titel: Sleep / Pause in Matlab
  Antworten mit Zitat      
Hallo,

ich verwende in Matlab pause(0.1) um z.b. 100ms mit der weiteren Ausführung zu warten. Während dieser Zeit kann im Hintergrund eine Simulink Simulation ausgeführt werden.

Nun ist mir "pause" aber zu ungenau und ich benötige "Sleep"-Zeiten im µs Bereich. Dies habe ich mir auch in einer MEX Funktion realisiert und kann den Prozess nun für wenige µs schlafen lassen. Allerdings wird nun auch Simulink blockiert. Dies soll nicht so sein.

Gibt es eine Möglichkeit meine Matlabausführung genauso wie bei "pause" anzuhalten jedoch Simulink weiterlaufen zu lassen?

Hoffe auf eine Hilfe. Ich komme nicht mehr weiter.

Greetz
Tobi


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.02.2012, 23:59     Titel: Re: Sleep / Pause in Matlab
  Antworten mit Zitat      
Hallo Tobi,

Wie hast Du das denn bisher als MEX umgesetzt?
Und wie testest Du, wieviele Millisekunden Matlab tatsächlich schläft, da ja auch der Sprung in das MEX und vom MEX zurück einen Overhead hat.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tobi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2012, 14:40     Titel:
  Antworten mit Zitat      
Hallo Jan,

also ich habe es versucht hiermit umzusetzen:

Code:

__int64 time1 = 0, time2 = 0, sysFreq = 0, freq;  

utime = *mxGetPr(prhs[0]);
   
    QueryPerformanceCounter((LARGE_INTEGER *) &time1);    
    QueryPerformanceFrequency((LARGE_INTEGER *)&freq);  
   
    do {        
        QueryPerformanceCounter((LARGE_INTEGER *) &time2);    
    } while(((1000000*(time2-time1))/freq) < utime);

 


Das funktioniert auch soweit nur blockiert logischerweise die restlichen Matlab Prozesse.
Ich habe auch versucht es in einem Thread laufen zu lassen und es einem bestimmten Prozessor zuzuweisen, so das vielleicht die anderen Threads der GUI und Simulink Simulation nicht blockiert werden. Nur wird wohl der komplette Prozess blockiert durch diese blockierende Schleife.

Die Auflösung der Zeiten wird damit zumindest um einiges schneller. Dies sehe ich an der absoluten Endzeit wenn ich z.b. 1000 mal 100µs warte, was mit pause niemals möglich wäre.
Mir geht es auch nicht drum auf 1µs genau das ganze aufzulösen. Schön wäre wenn ich größenordnung 100µs genau Auflösen könnte.
Den Mex Overhead könnte ich dann automatisch rausjustiern lassen in einem adaptiven Lernprozess.

Ich frage mich nur wie die Build in Funktion "pause" das realisiert das eine Simulink Simulation während der "pause" Phasen nicht blockiert.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum 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.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.