Hi, beim kompilieren von folgendem code bekomme ich immer die Fehlermeldung: multiple definition of `fuerporta' Sorry das ich das forum damit belaste, aber ich sehe den fehler einfach nicht. Da ich auch noch C anfänger bin, ist mir dieser fehler bestimmt noch nicht mal bewusst... Eine Dopellte definition finde ich einfach nicht. Alle meine header-dateien enthalten #ifndef header_h #define header_h "CODE" #endif. Der Code hat ursprünglich funktioniert, bis ich ihn nach dem Tutorial http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=48535&postdays=0&postorder=asc aufgeräumt habe. Ich hoffe es kann mir jemand helfen, sonst packe ich wieder alles in eine main.cpp datei! Die Ausgabe vom Compiler: obj/multiplex.o: In function `multiplexSetColumns0()': /Users/paul/Documents/Projects/multiplex/multiplex.cpp:24: multiple definition of `fuerporta' obj/main.o:/Users/paul/Documents/Projects/multiplex/main.cpp:60: first defined here multiplex.cpp:
1 | /*
|
2 | * multiplex.cpp
|
3 | * multiplex
|
4 | *
|
5 | * Created by Paul Szymanski on 21.01.11.
|
6 | *
|
7 | */
|
8 | |
9 | |
10 | #include "config.h" |
11 | #include "multiplex.h" |
12 | #include <avr/io.h> |
13 | #include "rncontrol1_4.h" |
14 | |
15 | |
16 | |
17 | uint16_t muster0=0b111111111; |
18 | uint16_t muster1=0b111111111; |
19 | uint16_t muster2=0b111111111; |
20 | |
21 | |
22 | // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs)
|
23 | void multiplexSetColumns0(void) { |
24 | PORTC = (muster0>>1); |
25 | fuerporta = muster0 & ~0b111111110; |
26 | fuerporta = (fuerporta<<multiplexLastColumn); |
27 | PORTA = (fuerporta | PORTA); |
28 | }
|
29 | |
30 | // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs)
|
31 | void multiplexSetColumns1(void) { |
32 | PORTC = (muster1>>1); |
33 | fuerporta = muster1 & ~0b111111110; |
34 | fuerporta = (fuerporta<<multiplexLastColumn); |
35 | PORTA = (fuerporta | PORTA); |
36 | }
|
37 | |
38 | // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs)
|
39 | void multiplexSetColumns2(void) { |
40 | PORTC = (muster2>>1); |
41 | fuerporta = muster2 & ~0b111111110; |
42 | fuerporta = (fuerporta<<multiplexLastColumn); |
43 | PORTA = (fuerporta | PORTA); |
44 | }
|
45 | |
46 | void multiplexSetLevel(int freischaltung, int level) { |
47 | if (freischaltung == 1) { |
48 | portoff(etagenport,level); |
49 | } else if (freischaltung == 0) { |
50 | porton(etagenport,level); |
51 | }
|
52 | }
|
main.cpp:
1 | /*
|
2 | * main.cpp
|
3 | * multiplex
|
4 | *
|
5 | * Created by Paul Szymanski on 18.01.11.
|
6 | *
|
7 | */
|
8 | |
9 | #include <stdlib.h> |
10 | #include <avr/io.h> |
11 | #include <util/delay.h> |
12 | #include "main.h" |
13 | #include "multiplex.h" |
14 | #include "config.h" |
15 | #include "rncontrol1_4.h" |
16 | |
17 | |
18 | int main(void) { |
19 | DDRC = 0xff; // C Pins als Ausgang setzen |
20 | DDRA = 0xff; // A Pins als Ausgang setzen |
21 | int ntesmuster = 0; |
22 | |
23 | |
24 | while(1) { |
25 | porton('A', 0); //Pullup an (Dadurch LEDs aus) Etage sperren |
26 | porton('A', 1); //Pullup an (Dadurch LEDs aus) Etage sperren |
27 | porton('A', 2); //Pullup an (Dadurch LEDs aus) Etage sperren |
28 | |
29 | int time_ms = 1000; // Zeit fü ein Muster |
30 | const int delay = 1; // Zeit für ein Frame in ms |
31 | int loops = time_ms/(3*delay); // Berechnung für durchläufe des Loops für ein 'muster' |
32 | |
33 | |
34 | while (loops != 0) { |
35 | |
36 | multiplexSetColumns0(); // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs) |
37 | multiplexSetLevel(1,0); // Obere Etage freischalten (Kathodenpins auf Masse) |
38 | _delay_ms(delay); // delay ms warten |
39 | multiplexSetLevel(0, 0); // Obere Etage Sperren (Kathodenpins auf 5V) |
40 | |
41 | multiplexSetColumns1(); // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs) |
42 | multiplexSetLevel(1, 1); // Mittlere Etage freischalten (Kathodenpins auf Masse) |
43 | _delay_ms(delay); // delay ms warten |
44 | multiplexSetLevel(0, 1); // Mittlere Etage Sperren (Kathodenpins auf 5V) |
45 | |
46 | multiplexSetColumns2(); // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs) |
47 | multiplexSetLevel(1, 2); // Untere Etage freischalten (Kathodenpins auf Masse) |
48 | _delay_ms(delay); // delay ms warten |
49 | multiplexSetLevel(0, 2); // Untere Etage Sperren (Kathodenpins auf 5V) |
50 | |
51 | loops--; |
52 | }
|
53 | ++ntesmuster; |
54 | }
|
55 | |
56 | return 0; |
57 | }
|
58 | |
59 | void portoff(char x, int n) { |
60 | switch (x) { |
61 | case 'A': |
62 | PORTA &= ~(1<<n); break; |
63 | case 'B': |
64 | PORTB &= ~(1<<n); break; |
65 | case 'C': |
66 | PORTC &= ~(1<<n); break; |
67 | case 'D': |
68 | PORTD &= ~(1<<n); break; |
69 | break; |
70 | }
|
71 | }
|
72 | |
73 | void porton(char x, int n) { |
74 | switch (x) { |
75 | case 'A': |
76 | PORTA |= (1<<n); break; |
77 | case 'B': |
78 | PORTB |= (1<<n); break; |
79 | case 'C': |
80 | PORTC |= (1<<n); break; |
81 | case 'D': |
82 | PORTD |= (1<<n); break; |
83 | break; |
84 | }
|
85 | }
|
multiplex.h
1 | /*
|
2 | * multiplex.h
|
3 | * multiplex
|
4 | *
|
5 | * Created by Paul Szymanski on 18.01.11.
|
6 | *
|
7 | */
|
8 | |
9 | #ifndef MULTIPLEX_H
|
10 | #define MULTIPLEX_H
|
11 | |
12 | #include <avr/io.h> |
13 | |
14 | #define etagenport 'A'
|
15 | #define multiplexLastColumn 3
|
16 | |
17 | uint8_t fuerporta; // Arbeitsvariable |
18 | |
19 | #endif
|