Komisches Verhalten im Programm

Gast #2189338
Lesenswert?
• ▲
▼
Hallo

kann mir jemand einen Tipp geben wieso bei den Sensor if-Abfragen der 
Debugger if und else-Abfrage überspringt.

Ebenso habe ich das Problem wenn ich im Debugger bei der Taster-Abfrage 
die Pins auf Low stelle bei Taster X+ nur die erste Zeile ausgeführt 
wird und die restliche if-Abfrage übersprungen wird. Danach springt es 
in die Taster-Abfrage X- die richtig ausgeführt wird.

Ein Unterschied ist nur wenn ich PB0 und PB2 auf 1 stelle dann springt 
es ins else.


MfG
1
static volatile bool variable = 0;
2

3
int main(void)
4
{
5
    //Sensor X+        LOW Active
6
    DDRE &= ~(1<<DDE6);
7
    //Sensor X-
8
    DDRE &= ~(1<<DDE7);
9

10
    //Taster X+
11
    DDRB &= ~(1<<DDB0);
12
    //Taster X-
13
 
14

15
    //Motor Clock X        LOW Active
16
    DDRB |= (1<<DDB5);
17
    PORTB |= (1<<PORTB5);
18
  
19

20
    TCCR1B |= (2<<CS10);  //kein prescaler
21
    TIMSK |= (1<<TOIE1);  //overflow interrupt enable
22

23
    sei();
24

25

26
    static bool sensor_x_plus;
27
    static bool sensor_x_minus;
28

29

30

31
    while (1)
32
    {
33
        //Sensor X+
34
        if (~PINE & (1<<PE6))
35
        {
36
            sensor_x_plus = true;
37
        }
38
        else
39
        {
40
            sensor_x_plus = false;
41
        }
42

43
        //Sensor X-
44
        if (~PINE & (1<<PE7))
45
        {
46
            sensor_x_minus = true;
47
        }
48
        else
49
        {
50
            sensor_x_minus = false;
51
        }
52
       
53

54
        //Taster X+
55
        if (~PINB & (1<<PB0)) //&& (sensor_x_plus != true))
56
        {
57
            PORTD |= (1<<PORTD5);  //Motor Direction X
58

59
            if(variable == 0)
60
            {
61
                PORTB &= ~(1<<PB5);
62
                variable = 1;
63
            }
64
            else if (variable == 1)
65
            {
66
                PORTB |= (1<<PB5);
67
                variable = 0;
68
            }
69
            _delay_ms(5);
70
        }
71
        //Taster X-
72
        else if (~PINB & (1<<PB2)) //&& (sensor_x_minus != true))
73
        {
74
            PORTD &= ~(1<<PORTD5);  //Motor Direction X
75

76
            if(variable == 0)
77
            {
78
                PORTB &= ~(1<<PB5);
79
                variable = 1;
80
            }
81
            else if (variable == 1)
82
            {
83
                PORTB |= (1<<PB5);
84
                variable = 0;
85
            }
86
            _delay_ms(5);
87
        }
88
        else
89
        {
90
            PORTB |= (1<<PB5);
91
        }
92

93
        _delay_ms(1);
94
    }
95
}
#2189488
Lesenswert?
• ▲
▼
Zum Debuggen ist es für erste nicht schlecht, wenn man den Compiler 
nicht optimieren lässt. Dann stimmen zwar die delay_ms Zeiten nicht 
mehr, da die aber beim Debuggen aber sowieso keinen Sinn haben, kann man 
die zum Debuggen auch ganz eifnach auskommentieren.

Grund: Der Compiler kann, darf und wird dein Programm umbauen, wenn er 
optimieren darf. Das, was dann letzten Endes auf dem µC ausgeführt wird, 
hat mit dem was du geschrieben hast, dem Buchstaben nach nicht mehr viel 
zu tun. Insbesondere existeren deine Zeilen dann so nicht mehr wirklich, 
so dass der Debugger Schwierigkeiten hat, das tatsächlich ausgeführte 
Programm mit deinem Quelltext in Übereinstimmung zu bringen.
Gast #2189581
Lesenswert?
• ▲
▼
Wenn ich die Optimierung auf -O0 stelle erscheint bei mir immer eine 
Ordnersuche wo steht

Please browse to the present location for files originally found at 
c:/avrdev/gcc/gcc-4.3.3/gcc/config

Was bedeutet das?

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.