Forum: Mikrocontroller und Digitale Elektronik Anweisung wird in switch() nicht ausgeführt


von moks (Gast)


Lesenswert?

Hallo zusammen. und zwar führt meine switch Funktion nicht alle 
Anweisungen aus.
Wie im code geschrieben, soll sich bei xänderung das lcd gelöscht und 
neu beschrieben werden.
mein Problem ist, der µC überschreibt einfach das Wort, ohne vorher zu 
löschen.

Woran kann das liegen.?
PS: das ClearScreen() funktioniert sonst auch immer. nur hier wird es 
übersprungen
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4
#include <stdio.h>
5
#include <stdbool.h>
6
#include "TWI_Master.h"
7
#include "mydefs.h"
8
#include "taster.h"
9
#include "functions.h"
10
#include "ks108.h"
11
#include "mydefs.h"
12
#include "fontsoft.h"
13
#include "draw.h"
14
#include "bitmap.h"
15
#include "abfragen.h"
16
17
volatile uint8_t x      = 0;
18
volatile uint8_t y      = 1;
19
volatile uint8_t pfeilpos  = 0;
20
volatile uint8_t z      = 1;
21
volatile char    lcd_puffer[128][8];  
22
void taster(void){
23
  if (get_key_short(1<<left)){
24
    x--;
25
  }
26
  if (get_key_short(1<<right)){
27
    x++;
28
  }
29
}
30
31
void homescreen(void){
32
  LCDSoftText("Spannungen",7,z1,BLACK);
33
  LCDSoftText("Bettleuchte",7,z2,BLACK);
34
}  
35
int main(void){
36
  
37
  lcd_init();
38
  init_io();
39
  init_timer();
40
  sei();
41
  
42
  
43
  
44
  while(1){
45
    taster();
46
    switch(x){
47
      case 0: ClearScreen; homescreen(); break;
48
      case 1: ClearScreen; LCDSoftText("test",0,0,BLACK); break;
49
    
50
    }
51
  }  
52
}

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

moks schrieb:
> Woran kann das liegen.?
> PS: das ClearScreen() funktioniert sonst auch immer. nur hier wird es
> übersprungen

ist ja kein wunder. Und wenn man sich die mühe macht, nicht alles auf 
ein Zeile zu schreiben, dann würden einem der Fehler auch auffallen.
1
ClearScreen; 
2
homescreen();

von B. S. (bestucki)


Lesenswert?

moks schrieb:
> case 0: ClearScreen; homescreen(); break;

Klammern hinter dem ClearScreen vergessen. Dann wird nicht die Funktion 
aufgerufen, sondern nur dessen Adresse ermittelt und das Ergebnis 
verworfen. Schalte mal -Wall und -Wextra ein. Dann sollte dich der 
Compiler mit sowas wie "statement with no effect" warnen.

von moks (Gast)


Lesenswert?

be stucki schrieb:
> Klammern hinter dem ClearScreen vergessen.

hab ich garnicht gemerkt ...
das war auch der Grund

aber:

be stucki schrieb:
> Schalte mal -Wall und -Wextra ein.

das hab ich. aber es kommt trotzdem keine warnung

von B. S. (bestucki)


Lesenswert?

moks schrieb:
> be stucki schrieb:
>> Schalte mal -Wall und -Wextra ein.
>
> das hab ich. aber es kommt trotzdem keine warnung

Welchen Compiler benutzt du? GCC wirft eine Warnung:
1
void foo(void){
2
}
3
4
int main(void){
5
  foo;
6
  return 0;
7
}
1
[Warning] statement with no effect [-Wunused-value]

-Wall schaltet die Option -Wunused-value ein.
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options

von moks (Gast)


Lesenswert?

muss man das verstehen.?

es war ein haken bei All warnings (-wall)

hab ihn nochmal rausgenommen, wieder reingemacht, gespeichert...

jetzt gehts


danke euch. Problem wurde gelöst ;)

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.