|
|
Rückgabewerte eines MEX-Files, "mxArray* plhs[]" |
|
Yann |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2009, 17:15
Titel: Rückgabewerte eines MEX-Files, "mxArray* plhs[]"
|
 |
Hallo Leute,
Ich versuche gerade zu verstehen wie die MEX-Datei funktioniert.ich habe folgendes Mex-File
Der Code steuert einen IOWarrior40 Microcontroller. Auf der Platine ist eine Taste an Pin1 des Controllers verbunden. Das Programm soll nur überwachen ob diese Taste gedrückt ist oder nicht.Wenn die Taste gedrückt ist, liefert die Methode pinueberwachen den Wert 5 (in iret) und anderenfalls liefert sie den Wert 0. Das alles funktioniert auch gut aber ich möchte jetzt in Matlab diesen Rückgabe (5 oder 0) nutzen.Ich weiß dass es mit dem Parameter "mxArray* plhs[]" geht, aber es klappt nicht bei mir. Weiß jemand wie das geht? Ich eure Hilfe
PS: mein Programm hat keine Eingangswerte aber ein Rückgabewert.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.11.2009, 17:48
Titel:
|
 |
Hallo,
nlhs steht für Anzahl der Ausgabeargumente,
plhs ist ein Zeiger auf die Ausgabeargumente.
plhs muss über mxArrays belegt werden, siehe
http://www.mathworks.com/access/hel.....tlab_external/f43721.html
Im unteren Drittel ist ein Code-Beispiel, das dir helfen dürfte.
Ein weiteres Beispiel für die Rückgabe einer 3x3 - Matrix:
double cDbl[] = {1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9}; % C-Daten
mlDouble = mxCreateDoubleMatrix(3,3,mxREAL); % MATLAB-kompatible Daten erzeugen
memcpy(mxGetPr(mlDouble),cDbl,sizeof(cDbl)); % C-Daten in den Speicher kopieren
plhs[0] = mlDouble; % Ausgabedaten definieren
Muss es so kompliziert sein? Leider ja. C und MATLAB arbeiten mit unterschiedlichen Datentypen; man muss also zunächst die C-Daten in MATLAB-kompatible Daten umwandeln, die man dann in plhs schreiben kann.
Grüße,
Harald
|
|
|
Yann |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2009, 18:00
Titel:
|
 |
Ok Harald, ich versuche mal diese Umwandlung.Ich hoffe es klappt.
Danke
|
|
|
Yann |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2009, 19:22
Titel:
|
 |
hi Harald,
ich habe versucht die Daten umzuwandeln aber matlab gibt mir noch Konvertierungsfehler.so sieht jetzt der code aus:
und so sehen die Fehlermeldungen:
error C2440: 'Initialisierung': 'mxArray *' kann nicht in 'double' konvertiert werden
error C2664: 'mxGetPr': Konvertierung des Parameters 1 von 'double' in 'const mxArray *' nicht mglich
error C2440'=': 'double' kann nicht in 'mxArray *' konvertiert werden
weiß jemand wie die funktion mxCreatDoubleScalar?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.11.2009, 20:40
Titel:
|
 |
Hallo,
Ja, was ich vergessen habe mitzugeben: mldouble muss als mxArray definiert werden. Das steht ja eigentlich auch in der Fehlermeldung.
Und ja, du kannst auch mxCreateDoubleScalar verwenden. Doku aufmachen, mxCreateDoubleScalar eingeben, und lesen Mehr kann ich dir dazu auch nicht sagen.
Grüße,
Harald
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|