Case-Abfrage

Gast #3396626
Lesenswert?

Hallo zusammen,

hab mal eine Frage zu meine Programm.

Zuerst mal der Code dann zu meinem Problem (=
1
#include <avr/io.h>
2
#include <avr/pgmspace.h>
3
#include "types.h"
4

5
#include "usart.h"
6
#include <avr/common.h>
7

8

9
void Zeitabfrage (Helligkeit)
10

11
{
12

13
//  s08 Helligkeit;
14
  
15
  Zeit = PINC; //vom a-Bit-Zähler
16
  PORTC = Zeit;  //Kontrolle ob der Wert übernommen wurde
17
  Helligkeit = PORTD;
18
//  NOP();
19

20
  switch (Zeit)
21
  {
22
  case 0x00: 
23
      break;
24
  case 0x01: 
25
      break;
26
  case 0x02: 
27
      break;
28
  
29
  case 0b00000011:
30
      Helligkeit = Helligkeit + 1;
31
      break;
32

33
  case 0x04:
34
      Helligkeit = Helligkeit++;
35
      break;
36

37
  case 0x05:
38
      Helligkeit = Helligkeit + 2;
39
      break;
40

41
  case 0x06:
42
      Helligkeit = Helligkeit + 2;
43
      break;
44

45
  case 0x07:
46
      Helligkeit = Helligkeit + 2;
47
      break;
48

49
  case 0x08:
50
      Helligkeit = Helligkeit++;
51
      break;
52

53
  case 0x0A ... 0x0B: 
54
      break;
55

56
  case 0x0C:
57
      Helligkeit = Helligkeit--;
58
      break;
59

60
  case 0x0D:
61
      Helligkeit = Helligkeit--;
62
      Helligkeit = Helligkeit--;
63
      break;
64

65
  case 0x0E:
66
      Helligkeit = Helligkeit--;
67
      Helligkeit = Helligkeit--;
68
      break;
69

70
  case 0x0F:
71
      Helligkeit = Helligkeit--;
72
      Helligkeit = Helligkeit--;
73
      break;
74

75
  case 0x10:
76
      Helligkeit = Helligkeit--;
77
      break;
78

79
  case 0x11:
80
      Helligkeit = Helligkeit--;
81
      break;
82

83
  case 0x12 ... 0x14:
84
      break;
85
  }
86

87
  PORTD = Helligkeit;
88
  Zeit = 0x00;  //Test das die Variable wieder auf 0 ist.
89
}

Also wenn ich den Wert 0x03 an PINC anlege springt das Programm in das 
case 0x08!

kann mir hier jemand weiterhelfen, hab es mit der 0bxxxx und der 
dezimalen schreibweise versucht.
Jedoch leiter ohne Erfolg.

Vielen dank im voraus.

LG
Gast #3396638
Lesenswert?

Luni schrieb:
> Also wenn ich den Wert 0x03 an PINC anlege springt das Programm in das
> case 0x08!

woran siehst du das, am Debugger?

Da für die Eingaben 3, 4 und 8 jeweils genau das gleiche passiert 
(Helligkeit wird um 1 erhöht) hat sich der Compiler vielleicht gedacht, 
dass er die drei Fälle zusammenlegen kann. Das spart Codespeicher, im 
Debugger kann es aber etwas verwirrend aussehen.
Gast #3396648
Lesenswert?

Dr. Sommer schrieb:
> Nein, 3 erhöht die Helligkeit um 1, 4 und 8 machen gar nichts.

Hoppla, stimmt. Ich hätte genauer hinschauen sollen.

Dann ist die Beobachtung von Luni allerdings wirklich verwunderlich:

Luni schrieb:
> Also wenn ich den Wert 0x03 an PINC anlege springt das Programm in das
> case 0x08!

Schade, meine falsche Interpretation hätte schön zu einer 
Compileroptimierung gepasst ;-)
Gast #3396665
Lesenswert?

Der Compiler scheint aber zu ahnen, was gemeint war und optimiert dann 
entsprechend bis zum vorgefunden Ergebnis. Bin immer wieder überrascht, 
was der GCC so kann. Ich würde allerdings mal die Warnings anschauen. 
Die geben mir oft wichtige Hinweise, was ich besser änderst schreiben 
sollte ;-)
Gast #3396794
Lesenswert?

Oliver R. schrieb:
> Die Konstruktion verstehe ich nicht ganz, wie ist denn DDRC gesetzt?

Diese Konstruktion ist für mich im Debugger hilfreich um zu sehen ob der 
uC wirklich das macht was er soll.


Rufus Τ. Firefly schrieb:
> Bist Du Dir sicher, daß Du damit das erreichst, was Du damit vermutlich
> erreichen möchtest?

Jap leider, hatte nicht dran gedacht dass ich das definieren muss, 
jedoch hat er mir das ausgeführt was ich erreichen wollte, werde ich 
aber noch ändern.


Achim S. schrieb:
> Da für die Eingaben 3, 4 und 8 jeweils genau das gleiche passiert
> (Helligkeit wird um 1 erhöht) hat sich der Compiler vielleicht gedacht,
> dass er die drei Fälle zusammenlegen kann. Das spart Codespeicher, im
> Debugger kann es aber etwas verwirrend aussehen.

sieht das in diesem Fall so aus?
1
case 0x03, 0x08, 0x09:
2
       .....

kann es leider nicht testen muss arbeiten.

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