ISR() ->error: redefinition of 'ISR'

Gast #552150
Hallo,

Ich habe mehrere Interrupt Routinen im Einsatz und diese wie im 
Toutorial alle mit ISR(Vektor) definiert. Für Vektor habe ich natürlich 
den jeweiligen Vektor eingesetzt. Beim kompilieren erhalte ich die im 
Betreff angegebene Fehlermeldung.

error: redefinition of 'ISR'

Nun meine Frage, müssen die Bezeichner unterschiedlich gewählt werden? 
Natürlich hab ich das schon ausprobiert, mit dem Ergebnis, dass das 
kompilieren erfolgreich war, allerdings wurde die 
Interruptserviceroutine nicht ausgeführt :(.

Danke
Gast #552156
Hall Daniel,

Ich hab mal zwischen den Zeilen gelesen, also ist es richtig, alle 
Interrupt Service Routinen mit dem Bezeichner "ISR" zu versehen?

Warum dann aber dieser Fehler?

Moderator Persönliche Seite #552233
Quacks wrote:

> ich war nur verwirrt, weil eine ISR() lief, mehrere nicht!??

Lief die wirklich?  Es ist ja schon einmal nicht ganz klar, wie du
überhaupt die Interrupts zugelassen hast (sei()), ohne
<avr/interrupt.h> einzubinden.  Aber nehmen wir mal an, du hättest
dafür
1
asm("sei");
geschrieben, dann hagelt es bei folgendem einfachen Beispiel:
1
#include <avr/io.h>
2

3
ISR(INT0_vect)
4
{
5
  PORTB = 0;
6
}
7

8
int
9
main(void)
10
{
11
  DDRB = 255;
12
  EIMSK = 1;
13
  asm("sei");
14

15
  for (;;) ;
16

17
}
erstmal massig Warnungen, die du alle ignoriert haben musst:
1
% avr-gcc -Wall -Wextra -Os -mmcu=atmega88 -o foo.elf foo.c
2
foo.c:4: warning: return type defaults to 'int'
3
foo.c: In function 'ISR':
4
foo.c:4: warning: type of '__vector_1' defaults to 'int'
5
foo.c:4: warning: unused parameter '__vector_1'
6
foo.c:6: warning: control reaches end of non-void function
Wenn ich mir das Disassembler-Listing dann ansehe, finde ich auch
(erwarteterweise) keinen einzigen wirklichen Interruptvektor
eingetragen:
1
% avr-objdump -d foo.elf
2

3
foo.elf:     file format elf32-avr
4

5
Disassembly of section .text:
6

7
00000000 <__vectors>:
8
   0:   19 c0           rjmp    .+50            ; 0x34 <__ctors_end>
9
   2:   32 c0           rjmp    .+100           ; 0x68 <__bad_interrupt>
10
   4:   31 c0           rjmp    .+98            ; 0x68 <__bad_interrupt>
11
   6:   30 c0           rjmp    .+96            ; 0x68 <__bad_interrupt>
12
   8:   2f c0           rjmp    .+94            ; 0x68 <__bad_interrupt>
13
   a:   2e c0           rjmp    .+92            ; 0x68 <__bad_interrupt>
14
   c:   2d c0           rjmp    .+90            ; 0x68 <__bad_interrupt>
15
   e:   2c c0           rjmp    .+88            ; 0x68 <__bad_interrupt>
16
  10:   2b c0           rjmp    .+86            ; 0x68 <__bad_interrupt>
17
  12:   2a c0           rjmp    .+84            ; 0x68 <__bad_interrupt>
18
  14:   29 c0           rjmp    .+82            ; 0x68 <__bad_interrupt>
19
  16:   28 c0           rjmp    .+80            ; 0x68 <__bad_interrupt>
20
  18:   27 c0           rjmp    .+78            ; 0x68 <__bad_interrupt>
21
  1a:   26 c0           rjmp    .+76            ; 0x68 <__bad_interrupt>
22
  1c:   25 c0           rjmp    .+74            ; 0x68 <__bad_interrupt>
23
  1e:   24 c0           rjmp    .+72            ; 0x68 <__bad_interrupt>
24
  20:   23 c0           rjmp    .+70            ; 0x68 <__bad_interrupt>
25
  22:   22 c0           rjmp    .+68            ; 0x68 <__bad_interrupt>
26
  24:   21 c0           rjmp    .+66            ; 0x68 <__bad_interrupt>
27
  26:   20 c0           rjmp    .+64            ; 0x68 <__bad_interrupt>
28
  28:   1f c0           rjmp    .+62            ; 0x68 <__bad_interrupt>
29
  2a:   1e c0           rjmp    .+60            ; 0x68 <__bad_interrupt>
30
  2c:   1d c0           rjmp    .+58            ; 0x68 <__bad_interrupt>
31
  2e:   1c c0           rjmp    .+56            ; 0x68 <__bad_interrupt>
32
  30:   1b c0           rjmp    .+54            ; 0x68 <__bad_interrupt>
33
  32:   1a c0           rjmp    .+52            ; 0x68 <__bad_interrupt>
34

35
00000034 <__ctors_end>:
36
  34:   11 24           eor     r1, r1
37
  36:   1f be           out     0x3f, r1        ; 63
38
  38:   cf ef           ldi     r28, 0xFF       ; 255
39
  3a:   d4 e0           ldi     r29, 0x04       ; 4
40
  3c:   de bf           out     0x3e, r29       ; 62
41
  3e:   cd bf           out     0x3d, r28       ; 61
42

43
00000040 <__do_copy_data>:
44
  40:   11 e0           ldi     r17, 0x01       ; 1
45
  42:   a0 e0           ldi     r26, 0x00       ; 0
46
  44:   b1 e0           ldi     r27, 0x01       ; 1
47
  46:   ea e7           ldi     r30, 0x7A       ; 122
48
  48:   f0 e0           ldi     r31, 0x00       ; 0
49
  4a:   02 c0           rjmp    .+4             ; 0x50 <.do_copy_data_start>
50

51
0000004c <.do_copy_data_loop>:
52
  4c:   05 90           lpm     r0, Z+
53
  4e:   0d 92           st      X+, r0
54

55
00000050 <.do_copy_data_start>:
56
  50:   a0 30           cpi     r26, 0x00       ; 0
57
  52:   b1 07           cpc     r27, r17
58
  54:   d9 f7           brne    .-10            ; 0x4c <.do_copy_data_loop>
59

60
00000056 <__do_clear_bss>:
61
  56:   11 e0           ldi     r17, 0x01       ; 1
62
  58:   a0 e0           ldi     r26, 0x00       ; 0
63
  5a:   b1 e0           ldi     r27, 0x01       ; 1
64
  5c:   01 c0           rjmp    .+2             ; 0x60 <.do_clear_bss_start>
65

66
0000005e <.do_clear_bss_loop>:
67
  5e:   1d 92           st      X+, r1
68

69
00000060 <.do_clear_bss_start>:
70
  60:   a0 30           cpi     r26, 0x00       ; 0
71
  62:   b1 07           cpc     r27, r17
72
  64:   e1 f7           brne    .-8             ; 0x5e <.do_clear_bss_loop>
73
  66:   03 c0           rjmp    .+6             ; 0x6e <main>
74

75
00000068 <__bad_interrupt>:
76
  68:   cb cf           rjmp    .-106           ; 0x0 <__heap_end>
77

78
0000006a <ISR>:
79
  6a:   15 b8           out     0x05, r1        ; 5
80
  6c:   08 95           ret
81

82
0000006e <main>:
83
  6e:   8f ef           ldi     r24, 0xFF       ; 255
84
  70:   84 b9           out     0x04, r24       ; 4
85
  72:   81 e0           ldi     r24, 0x01       ; 1
86
  74:   8d bb           out     0x1d, r24       ; 29
87
  76:   78 94           sei
88
  78:   ff cf           rjmp    .-2             ; 0x78 <main+0xa>

Also ich kauf dir nicht ab, dass deine eine ISR wirklich lief, und
guck bitte auch auf die Compilerwarnungen.
Gast #560415
Hi,

also ich hab den gleichen Fehler (avr-gcc 4.0.2) sobald ich zwei 
ISR(...) einbinde bekomme ich den Fehler.

Eigenartigerweise unter avr-gcc 3.4.2 funktioniert der gleiche Code 
einwandfrei.

#include <avr/interrupt.h>

hab ich natürlich drin.

mhm, wahrscheinlich mal wieder ein totaler Anfängerfehler :-(

Hat jemand eine Idee?

Gruß
Bernd
Moderator Persönliche Seite #562893
Bernd Klein wrote:

> ... wie kann ich denn am schnellsten die aktuelle
> Versionsnummer der installierten library herausfinden

Für die aktuellen Versionen steht sie in <avr/version.h>.  Wenn du
diese Datei nicht hast, ist deine Version noch 1.2.x, da gab es
keine interne Kennung für die Version.  Könnte man dann höchstens
an Hand der CVS $Id$ nachvollziehen.
#563005
mhm, alles etwas dubios bei mir. Also ich hab mal überprüft

unter
/usr/avr/avr/include/avr
finde ich die Datei version.h. Installiert habe ich demnach 1.4.5, das 
sollte wohl ok sein.

Trotzdem verweigert mir mein avr-gcc 4.0.2 das compilieren wie schon 
beschrieben. Ich werde mich mal auf "den Weg machen" und überprüfen ob 
es evel. noch irgendwo ne Installation der library von ubuntu gibt und 
diese dann beim compilieren herangezogen wird.

Keine Ahnung was es sonst noch sein kann. Schaun wir mal. Aber 
vielleicht hast du ja noch Ideen.

Gruß
Bernd
#563008
uaaaahhh,

ich Depp. Es war tatsächlich noch ne 1.2.x Version von Ubuntu auf meinem 
Rechner und die wurde beim compilieren herangezogen !

Nun läufts auch mit mehreren ISR(...) Funktionen !

Danke für den "Versionstipp" - hat mir letztendlich auf die Sprünge 
geholfen

Gruß
Bernd

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.