Sieh dir nur dein File funktionen.c an
1 | // Funktionen.c
|
2 |
|
3 | #include "main.h"
|
4 | #include "Funktionen.h"
|
5 |
|
6 |
|
7 |
|
8 | void XYZ (void);
|
9 |
|
10 |
|
11 | void xyz (void)
|
12 | {
|
13 | Werte.Var1 = 10;
|
14 |
|
15 | }
|
Jetzt lösen wir mal die #include auf, sprich wir machen genau das
gleiche was auch der Präprozessor macht.
Dann steht da:
1 | // main.h
|
2 |
|
3 |
|
4 |
|
5 | #include <stdio.h>
|
6 | #include <avr/io.h>
|
7 | #include <util/delay.h>
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | extern volatile struct Werte_t Werte;
|
14 |
|
15 |
|
16 | // Funtkionen.h
|
17 |
|
18 | extern void XYZ (void);
|
19 |
|
20 |
|
21 |
|
22 | void XYZ (void);
|
23 |
|
24 |
|
25 | void xyz (void)
|
26 | {
|
27 | Werte.Var1 = 10;
|
28 |
|
29 | }
|
und das wird jetzt compiliert. Siehst du da irgendwo eine Definition wie
denn nun ein struct Werte_t aussieht? Also ich nicht.
*.c Files werden unabhängig voneinander compiliert!
Das du in main.c die Defintion dieser struct hast, ist zwar nett,
interessiert aber den Cmopiler nicht, wenn er funktionen.c compiliert.
Zieh die Struktur in ein Header File, so dass alle *.c Files, die die
Struktur benötigen sie zur Verfügung haben.
main.h
******
1 | // main.h
|
2 |
|
3 | #include <stdio.h>
|
4 | #include <avr/io.h>
|
5 | #include <util/delay.h>
|
6 |
|
7 | struct Werte_t
|
8 | {
|
9 | uint16_t var1;
|
10 | uint16_t var2;
|
11 | };
|
12 |
|
13 | extern volatile struct Werte_t Werte;
|
main.c
******
1 | #include "main.h"
|
2 |
|
3 |
|
4 | volatile struct Werte_t Werte;
|
5 |
|
6 | int main (void)
|
7 | {
|
8 | while(1);
|
9 | return (0);
|
10 | }
|
Machen wir jetzt das gleiche Spielchen wieder und sehen uns an, was der
Präprozessor auf funktionen.c macht, dann kommt da raus
1 | // main.h
|
2 |
|
3 | #include <stdio.h>
|
4 | #include <avr/io.h>
|
5 | #include <util/delay.h>
|
6 |
|
7 | struct Werte_t
|
8 | {
|
9 | uint16_t var1;
|
10 | uint16_t var2;
|
11 | };
|
12 |
|
13 | extern volatile struct Werte_t Werte;
|
14 |
|
15 | // Funtkionen.h
|
16 |
|
17 | extern void XYZ (void);
|
18 |
|
19 |
|
20 |
|
21 | void XYZ (void);
|
22 |
|
23 |
|
24 | void xyz (void)
|
25 | {
|
26 | Werte.Var1 = 10;
|
27 |
|
28 | }
|
E voila!
Jetzt ist auch in Funktionen.c bekannt, wie eine struct Werte_t
aussieht.