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
Die Variablen aus dem hinzugelinkten Modul fressen aber Platz im RAM und können dazu beitragen, dass jetzt der Stack im RAM überläuft.
"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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.