Programmabsturz

Semaphor

Neues Mitglied
17. Mai 2009
4
0
0
Sprachen
Ich habe ein Programm geschrieben, welches getestet wurde un funktioniert (Beamforming mit 4 Mikrofonen). Jetzt habe ich noch das Programm ergänzt um einen Teil, doch es stürzte ab. Als ich einen anderen Teil ausgeklammert habe (der funktionierte...) funktionierte der neue Teil. Nun habe ich eine Funktion ausgeklammert, die gar nicht ausgeführt wird und doch stürzt das Programm ab, wenn ich sie nicht ausklammere. Kann sein, das irgendwo ein Array in das Codesegment schreibt, und desshalb des uC abstürzt?
Im anhang sind die beiden relevanten c-Files. Die ausgeklammerte Funktion calc_pegel_picture(pegel,pegel_picture); im Fall screen=2 ist die besagte Funktion von oben. Diese wird nicht ausgeführt, da screen=1 initialisiert wird und die variable screen nur ändert, wenn Taster gedürckt werden...
Ich habe schon sehr lange gepröbelt und versucht den Fehler zu finden, aber ich bin nun ratlos, weiss nicht genau was der Fehler sein könnte und wie ich in finden soll... Ich hoffe, jemand hat mir einen guten Tipp nach was ich suchen könnte... Danke
 

Anhänge

  • ETP_1.c
    10,9 KB · Aufrufe: 5
  • beamform.c
    5,8 KB · Aufrufe: 6
Erstens bin ich mir nicht ganz sicher was genau dein Problem ist.

Also die Funktion calc_pegel_picture verursacht einen Absturz wenn sie im Code vorhanden ist auch wenn du sie nicht aufgerufen wird?
Wenn du aber die calc_pegel_picture Funktion nicht ausklammerst musst du andere Programmteile ausklammern damit alles funktioniert?

Zweitens hast du uns nicht verraten welchen Controller du verwendest.
1 oder 2kb RAM könnten bei deinem Programm schon zu wenig sein.(hab nicht gezählt)
Wenn du mehr RAM verbrauchst als der Controller hat schreibst du irgendwann unweigerlich auf den Stack, und das kann vernichtend sein.

Ach ja, ein herzliches Willkommen meinerseits. Als C Programmierer wärst du hier mehr oder weniger eine Rarität.
 
stimmt, habe ich vergessen, ich verwende einen atmega128, hat 4k Ram. ja du hast das problem richtig verstanden. ich vermute auch, dass so etwas passiert, wie z.b. dass auf den stack geschrieben wird, aber wie finde ich heraus, dass das wirklich mein problem ist? habe mich noch nicht sehr gross rumgeschaut, aber warum bin ich als c-programmierer eine rarität? :D
 
stimmt, habe ich vergessen, ich verwende einen atmega128, hat 4k Ram.
Hmm, meiner Schätzung nach sollten 4k Ram reichen.
Was gibt denn der GCC für eine Speicherverbrauchsprognose?

ja du hast das problem richtig verstanden. ich vermute auch, dass so etwas passiert, wie z.b. dass auf den stack geschrieben wird, aber wie finde ich heraus, dass das wirklich mein problem ist?
Hast du schon probiert ganz am Anfang von calc_pegel_picture eine debug-Ausgabe über den Usart zu machen? Es wäre interessant zu wissen ob die Funktion nicht aus irgendeinem Grund doch aufgerufen wird. (soetwas ist generell zu empfehlen)

habe mich noch nicht sehr gross rumgeschaut, aber warum bin ich als c-programmierer eine rarität? :D
Naja, es gibt wenige(3 oder so) C-Programmierer die sich hier regelmäßig umschauen.
 
87% hat er angezeigt. ich habe mal die arrays der messwerte des adc kleiner gemacht und tatächlich funktioniert es jetzt. ich dachte dass 87% schon reichen würde... naja, habe immerhin etwas gelernt, und danke dir für die Hilfe!
 
Das Vergnügen lag ganz meinerseits.

Gibt es irgendwo eine Seite, ein Video oder ein paar Bilder, welche die Leistungsfähigkeit deines Audio-Ortungs-Dingens demonstrieren?
Alleine die Software sieht schon Faszinierend aus.
 
Hallo,

eine brauchbare Methode den Stackverbrauch zu überwachen, ist den Stackbereich am Anfang des Programms mit einem Muster zu initialisieren (z.B 0xAA), und dann immer mal wieder nachschauen (z.B Programm über Debugger stoppen) wie weit der Bereich überschrieben (=genutzt) wird.

Dazu gibt es hier eine Anleitung.

Gruß
rangar
 
@Nomis: Was genau meinst du mit Leistungsfähigkeit? Bilder oder Videos gibt es noch nicht, aber wenn es dich interessiert kann ich sonst mal etwas machen. Es wird einfach eine Lautsprecher auf einem 1x2m Feld gesucht, welches noch in 50 Quadrate unterteilt ist. Das ganze wird auf einem Display angezeigt. Es kann entweder das Quadrat angezeigt werden, in welchem des Lautsprecher ist oder ein 'Lärmebild' angezeigt werden, d.h. in etwa dasselbe wie bei einem Wärmebild, einfach mit Schall. Das ganze ist noch an ein Embedded Webserver angehängt, womit man das ganze auch im Browser anschauen kann. Zudem kann man das ganze noch mit einer Webcam betrachten, welche dem Stream den berechneten Ort des Lausprechers oder das Lärmebild überlagert anzeigt. Der Code um den es gegangen ist, ist natürlich nur die Berechnung (Delay-and-Sum-Algorithmus) des Ortes oder des 'Lärmebildes' und versenden der Informationen über Usart.

@rangar: danke für den tipp, hatte mal kurz den code implementiert ohne gross etwas zu verstehen, aber ist nicht gegangen. lasse es mal sein, solange alles funktioniert, da ich eigentlich nicht mehr allzu viel zeit in das projekt investieren kann/soll was auch immer. muss mal anfangen für die semesterprüfungen zu lernen ;-)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)