Forum: Digitale Signalverarbeitung / DSP / Machine Learning Rückgabewert falsch


von J. T. (smarty)


Lesenswert?

Huhu,

ich hab ein kleines Problem...Ich programmiere im Code Composer Studio 
mit C++ auf einem TMS302F2812. Nun habe ich ein paar Funktionen 
geschrieben die mir einen Rückgabewert liefern sollen.Soweit nichts 
wildes, nur das irgendwas bei der Werterückgabe verkehrt läuft. Ich 
möchte einen Wert vom Typ long zurückgeben (also einen mit Vorzeichen). 
Nun bekomme ich aber bei Werten über 15 Bit einen Überlauf, sprich Werte 
von -32768 bis 32767 werden korrekt übergeben. Da ich aber mit Variablen 
arbeite die vom Typ long sind und diese auch den Wertebereich von 
-2147483648 bis 2147483647 mit Vorzeichen abdecken, bin ich etwas 
ratlos. Normalerweise sollte der Übergabetyp doch möglich sein, oder 
muss ich da noch irgendwelche Einstellungen im Compiler vornehmen?
Hoffe mal jemand kennt dieses Problem, komm mir langsam schon etwas 
dämlich vor...

Vielen Dank im Voraus!

/*Beispielprogramm das an eine Variable vom Typ long dann bei mir eine 
-32768 zurückgibt*/

long Beispiel(long Zahl)
{
  Zahl=32768;
  return Zahl;
}

von Kai G. (runtimeterror)


Lesenswert?

Wie lässt du dir den Rückgabewert ausgeben? Vielleicht gehen da ein paar 
Bits verloren.

Ich meine in C gäbs 'nen sizeof-Operator - der sollte zumindest Klarheit 
über das Fassungsvermögen der Variablen liefern (nein, C ist nicht meine 
Muttersprache ;) )

Gruß

Kai

von J. T. (smarty)


Lesenswert?

Habs grade rausgefunden...
In den Build Options den Haken bei -> Treat C Files as C++ Files setzen 
und dann gehts... Is mal wieder spät zum rumwerkeln...
Nun noch die stdlib einbinden, dann klappts auch der labs Befehl wieder. 
NARF

Trotzdem danke für die Mühe!!!

von Simon K. (simon) Benutzerseite


Lesenswert?

Nimm doch den int32_t Datentyp, der hat garantiert 32 Bit breite.

von J. T. (smarty)


Lesenswert?

Ja das ganze ist, wie ich gerade rausgefunden habe, nicht so einfach...
Ich habe eine Funktion in der ich den Arctan nach dem 
Approximationsverfahren ermitteln möchte. Wenn ich das ganze jetzt auf 
C++ umstelle, dann klappt das mit der Werteübergabe, jedoch muss ich 
dann mein ganzes Programm umbauen, da er jetzt noch viele andere Dinge 
bemängelt. Ich werde es mir jetzt einfach so basteln, das ich den Zeiger 
auf meine Struktur mit übergebe und dort den Winkel direkt 
reinschreibe.Dann brauch ich den ganzen Käse mit dem Rückgabewert nicht 
und die Sache ist gelöst. Irgendwie scheint der Compiler hier nicht 
standardkonform zu sein. Langsam wirds eng mit der Zeitplanung für das 
Projekt :(

Trotzdem danke!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.