Hallo,
ich bin recht neu in der C Programmierung und quäle mich auf der Suche
nach dem sinnvollen Einsatz von logisch getrennten .c und .h Dateien.
Unter anderem lege ich in einer .h Datei die Texte der Menüstruktur
(nach dem AVR-BF Projekt) an.
Diese definiere ich z.B. so:
1 | // Menu text
|
2 | const char MT_Main[] PROGMEM = "Hauptmenue ";
|
3 | const char MT_Load[] PROGMEM = "Laden ";
|
Bisher ging alles gut, nun habe ich die Datei jedoch von 2 verschiedenen
.c Datein aus inkludiert und erhalte den Fehler:
menu.o:(.progmem.data+0x11): multiple definition of `MT_Load'
main.o:(.progmem.data+0x11): first defined here
Ich dachte, ein einfaches
1 | #ifndef MENU_H
|
2 | #define MENU_H
|
3 | ...
|
4 | #endif
|
Würde reichen, aber auch dies bringt nichts.
Wo ist mein Fehler?
Mein zweites Problem hängt mit Interupts zusammen.
button.h
1 | ISR (TIMER1_COMPA_vect); // ISR für Timer1 (500 ms Interrupt)
|
button.c
1 | // Allgemeine Includes
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <avr/pgmspace.h>
|
5 |
|
6 | #include "main.h"
|
7 | #include "button.h"
|
8 | ISR (TIMER1_COMPA_vect)
|
9 | {
|
10 | ...
|
11 | }
|
Ich erhalte immer die Warnung:
../button.h:7: warning: data definition has no type or storage class
../button.h:7: warning: type defaults to 'int' in declaration of 'ISR'
../button.h:7: warning: parameter names (without types) in function
declaration
Ist es korrekt in den einzelnen .c Datein jeweils nochmal alle header zu
includen, deren Inhalt ich verwenden möchte?
Noch eine letzte Frage:
Wie stelle ich das Piepen ab, wenn ich im AVR Studio eine Zeile im Build
oder Message Fenster anklicke?
Vielen Dank für eine Antwort,
Andreas