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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren