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

von Real_T auf int32_T casten

 

FuchsKeinPlan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2008, 19:49     Titel: von Real_T auf int32_T casten
  Antworten mit Zitat      
Hallo zusammen,
ich hoffe sehr, dass Ihr mir weiterhelfen könnt.

Ich habe seit letzte Woche anfangen c s-function zu Programmieren und dank die Matlab-Beispiele bin ich auch gut vorwärtsgekommen (glaub ich Rolling Eyes ).

Nun wollte ich ein real_T -Wert in ein int32_T casten:

Code:

static void mdlOutputs(SimStruct *S, int_T tid)
{
    int i=0;
    int width=0;
    uint32_T Iinput;
    real_T Ainput;
    InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
    real_T *y = ssGetOutputPortRealSignal(S,0);
    width = ssGetOutputPortWidth(S,0);
       
    for(i=0;i<width;i++)
        {
            Ainput = *uPtrs[i];
            Iinput = (uint32_T) *uPtrs[i];
            mexPrintf("Iinput     = %u\n",Iinput);
            mexPrintf("Ainput     = %u\n",Ainput);              
            mexPrintf("sInoput    = %u\n",sizeof(Iinput));                        
            mexPrintf("suPtrs     = %u\n",sizeof(*uPtrs[i]));
            mexPrintf("uPtrs      = %u\n",*uPtrs[i]);
            mexPrintf("uPtrs_hex  = %x\n",*uPtrs[i]);
            mexPrintf("Iinput_hex = %x\n",Iinput);
            mexPrintf("------------------\n");                      
            *y = *uPtrs[i];
        }
}

 


Das Problem ist, dass wenn ich am Eingang eine kleine Zahl eingebe (z.B. 12) meine Variable "Iinput" eine 0 anzeigt (in dezimal und hexadezimal). Wenn am Eingang der max.-Wert (2^32)-1 steht gerademal der Wert 2^31 in meine Variable steht (80000000h).
Die Real_T Werte geben die richtige Resultate aus
Ich habe schon einiges Versucht. Aber ich sehe kein Licht am Ende des Tunnels. Sad



Ich danke Euch für alle Tipps, die Ihr geben könnt.

Grüßle

FKP


FuchsKeinPlan

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2008, 14:53     Titel:
  Antworten mit Zitat      
Tag,

nach lange ausprobieren, habe ich entdeckt, dass die Funktionen

ssGetInputPortSignalPtrs() und ssGetOutputPortSignal() gibt.

Diese können mit beliebige Wertetypen arbeiten (und das Kasten funktioniert auch).

Das einzige: man muss mit den Pointer aufpassen, denn diese geben ein Pointer auf einen Array von Pointer zurück.

Beispiel:

Code:

uint32_T **u = (uint32_T **)ssGetInputPortSignalPtrs(S,0);
uint32_T        *y0  = (uint32_T *) ssGetOutputPortSignal(S,0);
y0 = (*u);
 



Trotzdem danke für die massive Unterstützung

Gruß

FKP
 
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 - 2024 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.