- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Probleme mit Programmaufruf.

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Na dein Programm macht doch auch nichts?!
    Es führt schnell die Funktion vor der while-Schleife aus, und geht dann in die leere Unendlichschleife und macht dann nichts mehr.
    Wenn er also nicht mehr reagiert, macht er ganz genau das was du programmiert hast!

    Und noch ein paar Grundsätzliche Dinge.
    Code:
    for(unsigned int a=0;a>15;a++);
    Dir ist schon klar das diese Schleife nie laufen wird?!
    Außerdem ist die Verwendung eines Int, egal ob signed oder unsigned, an der Stelle eine riesen Verschwendung von Speicher!

    Ein Stack ist ein Speicherbereich, ich würde es auf keinenfall ignorieren und mal gucken wo das Problem herkommt.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    33
    Beiträge
    384
    Danke für die Antwort. Das die Funktion nichts macht ist eigentlich nebensächlich. Da es egal ist welche funktion ich Aufrufe und ich kann halt im Debugger sehen, dass er irgendwie abstürzt, da er die Funktion (egal welche ich nehme) nicht ausführt. Das mit dem Stack ist auch noch sehr eigenartig. Ich hab etwas geforscht und hab iwo gelesen, dass es an mangelndem startup code liegt. Ich hab daraufhin mal den startup code aus einem Beispielprogramm kopiert. Aber geholfen hat das auch nich. Hat da vielleicht nochmal jemand ne Idee?

    mfg
    Erik

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    33
    Beiträge
    384
    So inzwischen bin ich mir sicher, dass das Problem mit dem Programmaufruf nur durch das Stackproblem bedingt ist. Ich hab ein wenig das Datenblatt durchforstet und bin auf das CONTROL register gestoßen bei dem man zwischen dem mainstack und dem process stack wählen kann. Nun stellt sich mir die Frage wo genau liegt der unterschied. Und Handler und Thread mode ist mir auch noch ein wenig suspekt. Und wie und wo initialisiere ich am besten den Stackpointer?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    Schau in den Startup Code und in dein Linker command-file. Nach einem reset wird der Stackpointer mit dem Wort initialisiert, das an Adresse 0 im Flash steht. Danach wird der Program Counter mit dem 2. Wort (ab Adresse 4) geladen. An dieser Adresse sollte sich der Reset-Handler befinden. Der Reset Handler initialisiert die Variablen und ruft dann irgendwann main() auf.
    Schöne Grüsse... Beppo

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen