[C]Funktionsaufruf blockiert Programm

Herakles

Profifragensteller
[EDIT]Problem gelöst! Der zugesicherte Speicher für den Task war zu gering.[/EDIT]

Moin!

Ich habe ein Programm, das ich für einen AVR32 Mikrocontroller programmiere. Der Prozessor hat 64kB RAM.Diesen Speicher nutze ich nicht voll aus, was ich von einem Tool weiß, das die Speichernutzung analyisert. Meine Speicherauslastung für das reine Programm ist demzufolge sogar unter 1%, selbst wenn einige Variablen dynamisch angelegt werden, habe ich noch richtig Luft nach oben.

Nun habe ich in dem Programm eine Funktion, in der eine andere aufgerufen wird. Der Aufruf der anderen Funktion geschieht per call-by-reference, also etwa so:

Code:
int8_t nette_funktion( void ) {
    struct versuch toll;
    (...)
    rufe_andere_funktion_auf( &toll );
    (...)
    return 0;
}

Das Interessante ist nun, dass mein komplettes Programm NUR dann funktioniert, wenn ich den Funktionsaufruf nach "rufe_andere_funktion_auf( &toll );" auslasse, bzw. auskommentiere.

Auch Aufrufe, die lang, lang vor dem aufruf von "nette_funktion()" geschehen funktionieren nur, wenn ich wie beschrieben den Aufruf auskommentiere. Das sind also Teile des Programms, wo dieser Codeteil also eigentlich nie berührt wird.

Weiterhin ist anzumerken, dass das Programm sehr wohl funktioniert, wenn ich kein call-by-reference mache, sondern "nur zum Versuch" mal NULL übergebe.

In dem Fall, dass das Programm hängt, bleibt es an einem "sleep" an einem sehr frühen Zeitpunkt des Ablaufs stehen. Nur so als Info.

Ich bin leider zu wenig C-Experte, um bei diesem Problem weiterzukommen. Kann mir irgendwer von Euch weiterhelfen? :confused:

Vielen herzlichen Dank!

Herakles
 
Zuletzt bearbeitet:
bei solch kleinem speicher sollte man sich auch immer daran erinnern was heap ist, und was stack ;)

probier doch spasseshalber mal die variable in deiner funktion global zu machen.
einfach das struct versuch ueber den funktionsaufruf zu schieben.
und guck mal was dann passiert. (wuerde mich jetzt auch mal interessieren)
 
Zurück
Oben