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

Segmentation violation Fehler beim benutzten von calllib

 

Bernd

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2008, 14:33     Titel: Segmentation violation Fehler beim benutzten von calllib
  Antworten mit Zitat      
Hallo,

Ich möchte Matlab verwenden um mit Hilfe der dll eine motorisierte Stage anzusteuern. Ich kann die dll auch problemlos laden aber wenn ich versuche die initialisierungsfunktion zu benutzten dann bringt matlab immer
Segmentation violation

und fordert mich auf matlab neu zu starten.
Hatte vlt schon mal jm ein ähnliches Problem oder hat jm eine Idee

Danke Bernd


Nyquist
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 19.11.07
Wohnort: Laupheim
Version: ---
     Beitrag Verfasst am: 31.01.2008, 16:02     Titel:
  Antworten mit Zitat      
Hallo Bernd,

wie hast du die DLL in Matlab eingefügt??

Also ich hab loadlibrary benützt. Mit libfunctionsview myname.dll kannst du Dir anzeigen lassen welche funktionen in deiner DLL enthalten sind. Wenn du alle Funktionen aufgelistet bekommst, dann sollte es mit calllib keine Komplikationen mehr geben. Du sollltest deine Funktionen aber auch so wie sie in libfunctionsview aufgelistet werden auch ansprechen.
_________________

Mit freundlcihem Gruß
Nyquist
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 31.01.2008, 16:34     Titel:
  Antworten mit Zitat      
Vermutlich werden die Daten, die Du zur Bearbeitung übergibst, nicht passen, weswegen es in der Funktion in der DLL zu einer Segmentation Violation kommt.

Nyquists Idee mit dem libfunctionsview ist da eine erste Möglichkeit, den Fehler zu suchen, auch wenn Du vorsichtig sein musst: Liegt im Programmcode der DLL ein Fehler vor, dann kann es sein, dass Dir auch die richtige Datenübergabe nichts bringt.

Am Sichersten ist es meiner Meinung nach, den Entwickler der DLL anzusprechen, wenn sich das Problem nicht beheben lässt.
Private Nachricht senden Benutzer-Profile anzeigen
 
bernd

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2008, 18:13     Titel:
  Antworten mit Zitat      
Vielen dank für Eure Antwortn,

Ich habe mir die Funktionen schon mal mit libfunctionsview anzeigen lassen, das hat auch gut geklappt. Ich glaube dass Problem liegt darin dass matlab die in der dll definierten structures nicht richtig auslesen kann. In der dll sind structures definiert die pointer enthalten als einträge. wenn ich die in matlab einlese erkennt matlab immer nur die hälfte der einträge. eine dieser structure ist das argument der funktion die ich mit calllib aufrufen wollte.

hatte schon jm mal ein ähnliches problem, weiß jm vlt wie ich das umgehen könnte?? Ich hab gelesen dass man dazu ein mex file schreiben muß, stimmt das??

Vielen Vielen Dank für Eure Hilfe
Grüße Bernd
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 31.01.2008, 18:26     Titel:
  Antworten mit Zitat      
Man *muss* kein Mexfile schreiben.
Allerdings bietet es sich in vielen Fällen an, da die Kommunikation zwischen einer normalen C- oder C++-Oberfläche und Matlab deutlich vereinfacht wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Chaosler
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 14.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 14:41     Titel: Bibliothek einbinden
  Antworten mit Zitat      
Hallo!

ich habe auch mit loadlib die Bibliothek An21xx (bzw. USB32IO, die abgespeckte Version) für den Cypress Controller einer USB-Relaiskarte eingelesen.
Ich kann mit libfunctions/libfunctionsview alle Funktionen die ich benötige finden.

Beim Versuch den Treiber der Karte mit Hilfe einer Funktion (OpenDevice) der AN21xx.dll (bzw. USB32IO, die abgespeckte Version) zu laden stürzt MATLAB immer ab.
Es kommt zu einer
"Segmentation Violation"

Hat jemand Erfahrungen in dem Zusammenhang und kann mir evtl. einen Tipp geben um dieses Problem zu lösen?


In den anhang hab ich den StackTrace gelegt.

Danke!

Stack.txt
 Beschreibung:

Download
 Dateiname:  Stack.txt
 Dateigröße:  7.37 KB
 Heruntergeladen:  412 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Chaosler
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 14.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2011, 23:59     Titel:
  Antworten mit Zitat      
Hallo noch einmal.

Immernoch das selbe Problem.
Hat denn noch keiner ein Gerät mit diesem Cypress Controller und der AN21xx.dll versucht zum laufen zu bekommen?
Oder ein ähnliches Vorhaben realisiert sodass er mir einen Tipp geben könnte?

Hier der Programmbrocken die zum Absturz führt:

_________________
DeviceID = calllib ('USB32IO', 'OpenDevice', i,'EZUSB','','');
___________________

Die Bibliothek wird vor dem Aufruf der Funktion OpenDevice erfolgreich geladen.
Insgesamt sieht es folgendermaßen aus, vielleicht findet ja jemand aus den ersten Blick etwas was ich vor lauter Bäumen nicht mehr sehe:

________________________________________________
%%

clc
clear all
close all

%% Lib einlesen

if libisloaded ('USB32IO')
unloadlibrary USB32IO
end

loadlibrary ('USB32IO', 'USBDLL.h');
f1 = libfunctions('USB32IO','-full');
libfunctionsview('USB32IO')

DeviceCloseAll = 77; %Initialisierung zur Kontrolle
DeviceCloseAll = calllib ('USB32IO','CloseAllDevices');
pause(2)

%% deviceNr bestimmen

cardID = 512; %spezifische GeräteTypNr.
DeviceID= [77,'','','']; %Initialisierung zur Kontrolle
devNR = 77; %Initialisierung zur Kontrolle
DeviceClose = 77; %Initialisierung zur Kontrolle
for i=0:31;
DeviceID = calllib ('USB32IO', 'OpenDevice', i,'EZUSB','','');
Err_No = calllib ('USB32IO', 'GetDeviceError', i);
if (Err_No == 0);
if (DeviceID == cardID),
devNR = i;
break;
end
end
end
DeviceClose = calllib ('USB32IO','CloseDevice', i);
disp (devNR)
______________________________________________________
Langsam aber sicher bin ich am Verzweifeln.
Vielleicht mache ich auch etwas grundlegendes falsch oder was ich machen will ist mit dem Interface garnicht möglich?

Wäre super wenn jemand da mehr wüsste und es mir mitteilen könnte!
Confused Crying or Very sad

USB32IO.rar
 Beschreibung:

Download
 Dateiname:  USB32IO.rar
 Dateigröße:  148.02 KB
 Heruntergeladen:  333 mal
USBDLL.h
 Beschreibung:

Download
 Dateiname:  USBDLL.h
 Dateigröße:  6.04 KB
 Heruntergeladen:  720 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
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.