Crash bei Funkt. Aufruf

Gast #76115
Lesenswert?
• ▲
▼
Hallo,

ich fange gerade an mit dem AVR zu programmieren. Ich habe folgendes
festgestellt jedesmal wenn ich eine Funktion aufrufe stürzt (bleibt
stehen) das Programm ab. Habe ich was vergessen wie Stack
initialisieren.

Ich benutze WinAVR mit GCC 3.3.1
STK500 Board mit AtMega 128.
Ich habe das Makefile von WinAVR benutzt.

Grüße Helge
Gast #76117
Lesenswert?
• ▲
▼
Hallo,

So anbei die die wichtigsten Daten. Ich habe mein Programm gekürzt
(Wollte einen UART programmieren)Der Effekt wohl der selbe. In dem
kurzen Testprogramm habe ich geshen das der Stack initialisiert wurde
und nach dem Rücksprung aus der Unterroutine bootet er neu. Push und
Pops habe ich in dem Assemblerfile nicht gesehen.

void test(void)
{
   BYTE led;
   WORD i,l;
   led = 0x80 | 0x40 | 0x20 | 0x10 ;   /* Test für Funktion test() */
   outp(~led, PORTB);   /* init variable representing the LED state */

  //wait
       for (i=0; i<0xFFFF; i++)   /* outer delay loop */
       l++;            /* just do something - could also be a NOP */

  i=0x55;  // fuer Debugging
  l=0x80;
}

void main(void)
{
   BYTE led;
   WORD i,l;
   outp(0xff,DDRB);            /* use all pins on PortB for output */

   led = 0x08 | 0x04 | 0x02 | 0x01;

  outp(~led, PORTB);   /* init variable representing the LED state */

  //wait
       for (i=0; i<0xFFFF; i++)   /* outer delay loop */
       l++;            /* just do something - could also be a NOP */

    test();

  led = 0x02;         /* setze neu fuer Funktions Ruecksprung */
  outp(~led, PORTB);   /* init variable representing the LED state */

  //sei();           /* Enable interrupts => enable UART interrupts */

/* aus Beispielsourcen kopiert */
   for (;;)
   {

       outp(~led, PORTB);      /* invert the output since a zero means:
LED on */
       led <<= 1;              /* move to next LED */
       if (!led)               /* overflow: start with Port B0 again
*/
           led = 1;
 //wait
       for (i=0; i<0xFFFF; i++)   /* outer delay loop */
       l++;            /* just do something - could also be a NOP */
   }
}

Danke und Grüße Helge
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.