mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Rückgabewert falsch


Autor: J. T. (smarty)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: J. T. (smarty)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch den int32_t Datentyp, der hat garantiert 32 Bit breite.

Autor: J. T. (smarty)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.