Forum: Mikrocontroller und Digitale Elektronik expected expression?


von Daniel (Gast)


Lesenswert?

Hallo,

Hab beim Tastenentprellen folgendes Problem beim Compilieren:

ISR( TIMER0_OVF_vect )                            // every 10ms
{
  static uint8_t ct0, ct1, rpt;
  uint8_t i;

  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload 
for 10ms

  i = key_state ^ ~BUTTON_PIN;                       // key changed ?
  ct0 = ~( ct0 & i );                             // reset or count ct0
  ct1 = ct0 ^ (ct1 & i);                          // reset or count ct1
  i &= ct0 & ct1;                                 // count until roll 
over ?
  key_state ^= i;                                 // then toggle 
debounced state
  key_press |= key_state & i;                     // 0->1: key press 
detect

  if( (key_state & BUTTON_REPEAT_MASK) == 0 )
  {            // check repeat function
     rpt = BUTTON_REPEAT_START;                          // start delay
  }

  if(--rpt == 0)
  {
    rpt = BUTTON_REPEAT_NEXT;                            // repeat delay
    key_rpt |= key_state & BUTTON_REPEAT_MASK;
  }
}

../keys.c:31: error: expected expression before ')' token
../keys.c:39: error: expected expression before ')' token

was ist denn an den IF's falsch ??

von Gast (Gast)


Lesenswert?

Dein Code hat nur 25 Zeilen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bitte formatiere Deinen Quelltext und nutze das Syntaxhighlighting des 
Forums, damit man den Kram besser lesen kann.

Am besten geht das, indem Du vor den Quelltext [ c ] (ohne Leerzeichen) 
und nach den Quelltext [ / c ] (ebenfalls ohne Leerzeichen) stellst.

Welche Zeilen sind 31 und 39? Pack' da 'nen Kommentar 'rein.

von Daniel (Gast)


Lesenswert?

1
ISR( TIMER0_OVF_vect )                            // every 10ms
2
{
3
  static uint8_t ct0, ct1, rpt;
4
  uint8_t i;
5
6
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload
7
for 10ms
8
9
  i = key_state ^ ~BUTTON_PIN;                       // key changed ?
10
  ct0 = ~( ct0 & i );                             // reset or count ct0
11
  ct1 = ct0 ^ (ct1 & i);                          // reset or count ct1
12
  i &= ct0 & ct1;                                 // count until roll
13
over ?
14
  key_state ^= i;                                 // then toggle
15
debounced state
16
  key_press |= key_state & i;                     // 0->1: key press
17
detect
18
19
  if( (key_state & BUTTON_REPEAT_MASK) == 0 )
20
  {            // check repeat function
21
     rpt = BUTTON_REPEAT_START;                          // start delay
22
  }
23
24
  if(--rpt == 0)
25
  {
26
    rpt = BUTTON_REPEAT_NEXT;                            // repeat delay
27
    key_rpt |= key_state & BUTTON_REPEAT_MASK;
28
  }
29
}

Zeile 31:
1
if( (key_state & BUTTON_REPEAT_MASK) == 0 )
Zeile 39:
1
 if(--rpt == 0)

sorry ;)

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Wo ist BUTTON_REPEAT_MASK definiert (schätze mal als #define); und wie?

Ich glaube da liegt der Hase im Pfeffer.

Wenn Zeile 31 diese ist:
1
if( (key_state & BUTTON_REPEAT_MASK) == 0 )

dann ist Zeile 39 diese
1
key_rpt |= key_state & BUTTON_REPEAT_MASK;

Denn
1
if(--rpt == 0)
ist Zeile 36!

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.