Forum: Mikrocontroller und Digitale Elektronik Vn der Methode zurück zur Main


von Pascal S. (pascal900198)


Lesenswert?

Moin!

Ich weiß nicht warum, aber er kommt komischerweise nicht mehr von der 
Methode sFlanke() zurück zur main. Das merk ich daran, dass er den 
letzten Befehl in der main nicht ausführt. Es muss am Programm liegen, 
weil der Atmega8 mit einem anderen funktioniert.

#include <avr/io.h>

unsigned char pb;

int sFlanke() {

  if (!(PIND & (1 << PD2))) {
    pb = 1;
    return 0;
  } else if (pb == 1) {
    pb = 0;
    return 1;
  } else {
    return 0;
  }

}

int main() {

  DDRD = 0b11100011;

  pb = 0;

  while (1) {

    if (sFlanke()) {
      PORTD = 0xFF;
    }

    PORTD = 0xFF;

  }

}
von Peter II (Gast)


Lesenswert?

Pascal S. schrieb:
> if (sFlanke()) {
>       PORTD = 0xFF;
>     }
>     PORTD = 0xFF;

was soll das sein? PORTD wird immer auf 0xFF gesetzt egal ob das if 
erfolgreich war oder nicht. Wie du hier etwas sehen willst ist mir nicht 
ganz klar.
von Pascal S. (pascal900198)


Lesenswert?

Das ist es ja. PORTD sollte laut dem Programm auf 0xFF gesetzt werden Da 
passiert aber nichts. Wenn ich die If Anweisung drunter setzt, wird 
PORTD auf 0xFF gesetzt. Das bedeutet, dass er in der Methode iwie hängen 
bleiben muss.
von Peter II (Gast)


Lesenswert?

und was sagt der simulator?
von Pascal S. (pascal900198)


Lesenswert?

Simulator?
Ich verwende Eclipse mit dem AVR PlugIn. Da gibts soweit ich weiß keinen 
Simulator. Aber ist eine gute Idee. Beim AVR Studio ist einer dabei 
oder? Dann probier ich das mal aus.
von Pascal S. (pascal900198)


Lesenswert?

So, hab das jetzt mal mit dem Simulator getestet. Nach dem return Befehl 
in der Methode springt er ans ende der Methode und dann zurück zur Main. 
Ist das normal mit dem an das Ende der Methode springen?
von Karl H. (kbuchegg)


Lesenswert?

Ist ziemlich normal.
Die meisten Compiler verlagern die Aufräumarbeiten am Ende einer 
Funktion an einen gemeinsamen Ort und springen den an, ehe es zurück 
geht.
von Pascal S. (pascal900198)


Lesenswert?

Hm, habe jetzt mal nach langem Rumprobieren den Atmega ausgetauscht, 
jetzt funktionierts :) Komisch, dann scheint der wohl nicht mehr richtig 
zu funktionieren.
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
Noch kein Account? Hier anmelden.