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

Gast #552150
Lesenswert?
• ▲
▼
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
Moderator Persönliche Seite #552233
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.