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

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.