merkwürdiges Problem!

OP #1022284
Lesenswert?

Hi, ich brauch hilfe ...

ich linke ein compiliertes >(selbstgeschriebenes)  modul zu einem 
bereits bestehendem projekt
hinzu und das gesamte programm macht nichtmehr was es machen soll, ob
wohl ersteinmal testweise überhaupt kein aufruf der funktionen in dem
neu hinzugefügten modul aus dem programm vorhanden sind ( auch keine IRQ
in dem neuen Modul).

was  ist dort schief gelaufen ??   ich mein eig. dürfte der code des
neuen moduls ja nie ausgeführt werden wenn ich ihn nicht aus dem
programm aufrufe oder ??


_
atmega2561 mit avr gcc
Persönliche Seite #1022542
Lesenswert?

"Kanarienvogel ins Programm einbauen"

Früher sind die Bergleute mit Kanarienvögeln (bzw. Singvögeln) in die 
Grube eingefahren und wenn die Tiere umkippten, wussten sie, dass 
tödliche Gase im Stollen stehen....

Programmierer bauen Kanarienvögel in den Programmen ein, die melden bzw. 
anzeigen, dass z.B. der Stack überläuft oder übergelaufen ist.

Das kann z.B. eine Variable mit auffälligem (magischem) Inhalt sein, die 
am Ende des kritischen Bereichs plaziert wird. Eine Routine prüft ab, ob 
die Variable noch den erwarteten Wert hat oder vom stack überschrieben 
wurde.

auf dem µC würde man als kritischen Bereich das z.B. Ende des 
Variablenbereichs wählen, also dort wo der Stack endet, wenn man keine 
dynamische Speocherverwaltung benutzt.

Wenn man malloc und Co. direkt oder indirekt (printf...) benutzt, muss 
man schauen, wo der Heap liegt, der von malloc benutzt wird und 
entsprechend die Stackobergrenze markieren. Näheres zu dem 
Speichermodell in der Doku der avr-libc.

Idealerweise verbraucht die Prüfroutine selbst keinen oder wenig Stack 
und wird regelmäßig genug aufgerufen. Das heisst die Prüfroutine kann 
nicht grossartig Ausgaben machen.

Ich kann mir vorstellen dafür einen Timer zu opfern oder mitzubenutzen 
und ggf. den µC tot umfallen zu lassen (Anzeige an einem Pin und µC 
anhalten). Bei mehr freien Resourcen kann man auch versuchen den 
aktuellen Stackpointer über eine Schnittstelle nach aussen zu geben.

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