AVR springt nicht aus Funktion

Gast #4599456
Lesenswert?

Hi Leute,

ich bin Neu hier und habe ein merkwürdiges Problem mit meinem Programm:

1
#include <avr/io.h>
2
#include <stdio.h>
3
#include <stdint.h>
4
#include <stdlib.h>
5
#include <avr/interrupt.h>
6
#include <avr/pgmspace.h>
7
#include <util/delay.h>
8

9
#define Stat_LED_bl PC5
10
#define Stat_LED_rt PC6
11

12
void test_Funktion()
13
{
14
  PORTC |= (1<<Stat_LED_bl);    // blaue Status-LED einschalten
15
}
16

17
int main(void)
18
{
19
  test_Funktion();
20
  PORTC |= (1<<Stat_LED_rt);    // rote Status-LED einschalten
21

22
    while (1) 
23
    {
24
    
25
    }
26
}


Und zwar springt der Controller beim oben gezeigten Beispiel zwar in die 
Funktion "test_Funktion()", messbar durch die eingeschaltete blaue LED 
auf der Platine, aber dort einfach nicht mehr heraus. -> Die rote LED 
bleibt ausgeschaltet

Dabei ist es völlig egal was in der Funktion steht und welche Funktion 
auch aufgerufen wird. In der ersten, in die er springt verharrt der uC 
und wartet auf besseres wetter oder so...

Da ich mein Programm mitlerweile auf diesen kleinen Code 
heruntergebrochen habe, verschiedene "Schreibweisen" von Funktionen 
(z.B. void test(void), int test(void) und return-Befehle am Ende der 
Funktion) versucht habe, aber alles nichts gebracht hat, melde ich mich 
in meiner Verzweiflung bei euch...

Zu meinem Umgebung:
ATmega128
AVR Studio 7 (v7.0.790)

Da es das erste Mal ist, das ich mit AVR Studio 7 programmiere, schließe 
ich einen Bug oder falsche Einstellungen nicht aus, aber bei Onkel 
Google finde ich da rein garnichts zu...

Vieleicht hat wer von euch noch eine Idee!

Vielen Dank schonmal!

LG
Andreas
Gast #4599475
Lesenswert?

Hi

>habe jetzt nicht nachgeschaut, aber einige ATmega haben ein
>Kompatibilitätsmodus die Standardmäßig aktiviert ist. Schau mal bei den
>Fuse ob du etwas findest.

>Das führt zumindest genau zu dem verhalten.

Nö, macht es nicht. Im M103-Mode wäre PortC generell als Ausgang 
konfiguriert.

MfG Spess
#4599477
Lesenswert?

Bist du dir sicher, dass er nicht mehr aus der Funktion heraus springt 
oder einfach die rote LED aus anderen Gründen nicht funktioniert?

Vertausche im Code einmal Stat_LED_bl und Stat_LED_rt, leuchtet dann 
auch die blaue LED oder funktioniert die rote dann?


Bezüglich DDRC - Standardmäßig ist beim ATmega128 der ATmega103 
Kompatibilitätsmodus aktiviert, solang dieser nicht deaktiviert wurde 
ist Port C sowieso als Ausgang konfiguriert.
Gast #4599581
Lesenswert?

Hi Leute,

danke schonmal für die vielen Antworten! :)
Ich komme zwar nachher erst zum testen, aber vorab, natürlich 
funktioniert die rote LED! :P Bevor ich mit den Funktionen rumspiele, 
werden erstmal alle "Verbraucher" auf Funktion getestet.

Ausserdem ist es egal was hinter der Funktion steht, nichts von alle dem 
wird ausgeführt leider. ;(


LG
Andreas
Moderator Persönliche Seite #4599600
Lesenswert?

Andreas schrieb:
> Ausserdem ist es egal was hinter der Funktion steht, nichts von alle dem
> wird ausgeführt leider.

Deshalb tippe ich wie Peter auf die M103-Fuse. Wenn der Stack kaputt 
ist, dann kann er auch nach Funktionsaufruf nicht wieder zurückspringen.

Dein µC muss erstmal auf ATmega128 umgestellt werden. Und danach musst 
Du beide Pins noch auf Ausgang setzen, weil die dann nämlich nicht mehr 
standardmäßig auf Ausgang programmiert sind.
Gast #4600381
Lesenswert?

Guten Morgen,

was soll ich sagen, ich habe gestern das Fuse-Bit gesetzt und nun 
funktioniert alles so wie es soll!

Danke!! :)

Auf die Idee wäre ich alleine nie gekommen...

Dann kann es ja weiter gehen und bei weiteren Fragen weiss ich ja nun, 
wo ich damit hinmuss :thumbsup:

LG
Andreas

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