Arduino Forum

International => Deutsch => Topic started by: Doc_Arduino on Oct 14, 2016, 08:21 pm

Title: #if defined und Interrupt Vector wollen nicht
Post by: Doc_Arduino on Oct 14, 2016, 08:21 pm
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?

Code: [Select]
/*
 * 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




Quote
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'
Title: Re: #if defined und Interrupt Vector wollen nicht
Post by: Whandall on Oct 14, 2016, 08:42 pm
Warum glaubst du als einziger Zuweisungen ausserhalb von Funktionen schreiben zu dürfen?

Code: [Select]
  EIMSK = (1<<INT5) | (1<<INT4);
  EICRB = (1<<ISC51) | (1<<ISC41) | (1<<ISC40);
Title: Re: #if defined und Interrupt Vector wollen nicht
Post by: Doc_Arduino on Oct 14, 2016, 09:03 pm
Hallo,

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

Title: Re: #if defined und Interrupt Vector wollen nicht
Post by: Whandall on Oct 14, 2016, 09:05 pm
Compiler sind eher old-fashioned und werden von neuen Wegen verwirrt.  ;)
Title: Re: #if defined und Interrupt Vector wollen nicht
Post by: Doc_Arduino on Oct 14, 2016, 09:51 pm
Hallo,

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