#if defined und Interrupt Vector wollen nicht

Hallo,

ich möchte je nach µC die passenden Register, Bits und Interrupt Vectoren verwenden.
Nur bekomme ich das nicht kompiliert.
Mit den Fehlermeldungen weiß ich nichts so recht anzufangen was wirklich gemeint ist.
Irgendwie kommt er mit der volatilen Variablen oder den ISR Vectoren nicht klar.
Wo liegt mein Fehler?

/*
 * Doc_Arduino - german Arduino Forum
 * IDE 1.6.12
 * Arduino Mega2560
 * 14.10.2016
 */

#include <util/atomic.h>    // für cli() und sei() mit SREG Sicherung

volatile unsigned long micros_time;

#if defined(__AVR_ATmega2560__)
  EIMSK = (1<<INT5) | (1<<INT4);
  EICRB = (1<<ISC51) | (1<<ISC41) | (1<<ISC40);

  ISR(INT4_vec)
  {
    micros_time = micros();
  } 
  
  ISR(INT5_vec)
  {
    micros_time = micros();
  } 
#endif


#if defined(__AVR_ATmega328P__)
  EIMSK = (1<<INT1) | (1<<INT0);
  EICRA = (1<<ISC11) | (1<<ISC01) | (1<<ISC00);
  
  ISR(INT0_vec)
  {
    micros_time = micros();
  }

  ISR(INT1_vec)
  {
    micros_time = micros();
  }
#endif

const byte PIN_IN_RISI = 2;      
const byte PIN_IN_FALL = 3;     


void setup() {

  pinMode (PIN_IN_RISI, INPUT_PULLUP);
  pinMode (PIN_IN_FALL, INPUT_PULLUP);
}


void loop() {

      
}  // end of loop

Arduino: 1.6.12 (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,

from sketch\Datalogger_002.ino.cpp:1:

Datalogger_002:13: error: expected unqualified-id before 'volatile'

EIMSK = (1<<INT5) | (1<<INT4);

^

Datalogger_002:13: error: expected ')' before 'volatile'

Datalogger_002:13: error: expected ')' before 'volatile'

Datalogger_002:14: error: expected unqualified-id before 'volatile'

EICRB = (1<<ISC51) | (1<<ISC41) | (1<<ISC40);

^

Datalogger_002:14: error: expected ')' before 'volatile'

Datalogger_002:14: error: expected ')' before 'volatile'

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:30:0,

from sketch\Datalogger_002.ino.cpp:1:

C:\Users\Worker\AppData\Local\Temp\arduino_modified_sketch_310567\Datalogger_002.ino: In function 'void INT4_vec()':

C:\Users\Worker\AppData\Local\Temp\arduino_modified_sketch_310567\Datalogger_002.ino:16:7: warning: 'INT4_vec' appears to be a misspelled signal handler, missing __vector prefix [-Wmisspelled-isr]

ISR(INT4_vec)

^

C:\Users\Worker\AppData\Local\Temp\arduino_modified_sketch_310567\Datalogger_002.ino: In function 'void INT5_vec()':

C:\Users\Worker\AppData\Local\Temp\arduino_modified_sketch_310567\Datalogger_002.ino:21:7: warning: 'INT5_vec' appears to be a misspelled signal handler, missing __vector prefix [-Wmisspelled-isr]

ISR(INT5_vec)

^

exit status 1
expected unqualified-id before 'volatile'

Warum glaubst du als einziger Zuweisungen ausserhalb von Funktionen schreiben zu dürfen?

  EIMSK = (1<<INT5) | (1<<INT4);
  EICRB = (1<<ISC51) | (1<<ISC41) | (1<<ISC40);

Hallo,

ich gehe gern neue Wege. :slight_smile:
Ne, jetzt wo du es sagst, sehe ich das auch. War mir nicht aufgefallen das es außerhalb steht.
Danke.

Compiler sind eher old-fashioned und werden von neuen Wegen verwirrt. :wink:

Hallo,

das die sich selbst einfach nicht anpassen können. Der DAU davor muß es doch auch. :wink: