Verfasst am: 18.08.2011, 16:00
Titel: Code ist zu lagsam! Live Plotten von Messdaten
Hallo,
der folgende Code liest 2 Werte nacheinander von einem Mikrocontroller ein, und Plottet sie Live. Das ganze läuft über eine UART Schnittstelle und der Wert, den ich übermittle hat 16 Bit. Da ich aber nur 8 Bit senden kann, sind es 2 Werte.
Der Code ist aber langsamer als meine Oma bei Frühstück! Bis überhaupt der Com Port geöffnet ist, dauert es schon sein 50-60 sekunden. Dann ist die Abtastrate viel zu langsam. Kann ich das irgendwie noch Optimieren? Gibt es übliche Zeitfresser?
fprintf(serialObject,'a'); %1. Wert anfragen
while serialObject.Bytesavailable==0%warten bis alle Bits da sind pause(0.00000001);
end
low=fread(serialObject,serialObject.Bytesavailable);
fprintf(serialObject,'b');%2. Wert anfragen
while serialObject.Bytesavailable==0 pause(0.00000001);
end
erg=256*fread(serialObject,serialObject.Bytesavailable)+low;
voltage(count)=erg;
set(plotHandle,'YData',voltage,'XData',time);
set(figureHandle,'Visible','on');
datetick('x','mm/DD HH:MM');
count = count +1;
end
Lass doch mal den Profiler mitlaufen, dann siehst du die Flaschenhälse.
Dass das Öffnen des COM-Ports 60 Sekunden dauert klingt aber schon seltsam..
Etwas was den Code auf Großmutterfrühstücktempo verlangsamt springt mir hier nicht ins Auge.
Klar, man könnte Voltag preallocieren, aber auch ohne, sollte es nicht zuuu langsam sein.
Ist die pause so klein sinnvoll?
Macht der Code denn prinzipiell das Richtige?
Hast du den Terminator entsprechend deines Mikrocontrollers gesetzt?
Gast1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.08.2011, 16:25
Titel:
Eventuell liegt es an datetick,
das ist wohl recht langsam
Wasnlos
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.08.2011, 21:27
Titel:
Das hier sind die Daten des Profilers. Man sieht ganz deutlich, dass das erzeugen und öffnen des Serielen Objects insgesamt 32 sekunden dauert. Das mit dem datetick ist auch ganz schön Zeitintensiv werd ich gleich mal ändern.
Woran kann es liegen, dass der Comport so langsam ist?!
PlotGyro 1 55.422 s 6.864 s
serial.serial>serial.serial 1282 22.685 s 22.029 s
serial.fopen 1 10.850 s 10.850 s
datetick 203 10.718 s 1.244 s
datetick>bestscale 203 9.164 s 0.032 s
dateTickPicker 203 9.132 s 0.302 s
dateTickPicker>localGetExtentHG1 203 8.584 s 8.560 s
serial.fprintf 408 3.178 s 2.847 s
serial.subsref 1281 1.847 s 0.216 s
serial.subsref>localIndexOf 1281 1.306 s 0.136 s
serial.get 2098 0.528 s
Wasnlos
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.08.2011, 21:30
Titel:
Ich hab noch eine Frage:
Derzeit ist die Abbruchbedingung eine Zeit, die man einstellen kann. Das ist aber blödsinnig, da ich beim starten noch nicht weis, wie lange das Script laufen soll. Gerne würde ich das mit einem Knopf oder einer entspr. Eingabe beenden, halt dann wenn ich es nichtmehr brauche. Derzeit muss ich das immer mit strg + c im Hauptfenster Abbrechen. Das muss doch auch anders gehen oder?
Einstellungen und Berechtigungen
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
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.