Frage zur Parameterübergabe im Stack

Gast #453003
Lesenswert?
• ▲
▼
Hallo, ich rufe folgende Routine

long long bla(long long eins,long long zwei,long long drei)
{
return drei ;
}


so auf:
rerere=bla( (long long)(1ll),(long long)(2ll),(long long)(3ll));

Das "1ll" ist "eins Ell Ell", Suffix für long long, also richtiger Typ 
mit nem Sicherheits-cast.
Das funzt auch, die zwei kommt zurück, die eins auch, die drei aber 
nicht !?
D.h. return(3); liefert Schrott zurück.

Die funktionierende Variante macht das handling der Daten nur über die 
Register, die nicht-funktionierende Variante holt sich die Daten vom 
Stack und liefert sie in den Registern zurück. Die Stackzugriffe gehen 
wohl schief. Im angehängten File Auszüge des listings. Zu geringe 
Stackgröße ist ausgeschlossen.

Atmega128 ist Zielhardware, natürlich GCC.

Wo liegt der Fehler, gibts Infos oder Optionen dazu, die mir unbekannt 
sind?

Danke
Cheers
Detlef
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.