Hallo,
nach etlichen Jahren Programmiererei in Assembler wollte ich mir jetzt
das Leben etwas einfacher machen und meine AVR-Projekte in C
programmieren.
Ich verwende das AVR-Studio und GCC-Compiler.
Jetzt bekomme ich schon bei den kleinsten Anfängen Probleme.
Ich will nichts anderes machen als eine include-File in mein
Hauptprogramm einbinden.
Ständig kommt der Fehler:
D:\Entwicklung\Modellbau\Nautiksteuerung\Nautiksteuerung\default/../Naut
iksteuerung.c:26: undefined reference to `LED_Init'
Im Moment habe ich drei Files geschrieben:
als main Nautiksteuerung.c
und eine include-File LEDcontrol.c
zusätzlich dazu LEDcontrol.h
das Hauptprogramm:
1 |
|
2 | #include <avr/io.h>
|
3 | #include "LEDcontrol.h"
|
4 |
|
5 | /**************************************************
|
6 |
|
7 | Folgende Funktionen sind implementiert:
|
8 |
|
9 | LED_Init
|
10 |
|
11 | **************************************************/
|
12 |
|
13 | int main (void)
|
14 | {
|
15 | LED_Init();
|
16 | }
|
Die include-File .c
1 |
|
2 | #include <avr/io.h>
|
3 | #include "LEDcontrol.h"
|
4 |
|
5 | /*** Funktion LED_Init ***/
|
6 |
|
7 | void LED_Init (void);
|
8 | {
|
9 | DDRB |= (1<<DDB0) | (1<<DDB1);
|
10 | PORTB |= (1<<PB0) | (1<<PB1);
|
11 | }
|
und ebenso diese .h -File
1 | /***** verwendete Definitionen ********/
|
2 |
|
3 | void LED_Init (void);
|
Alle Files stehen im gleichen Verzeichnis.
die make-File hat diesen Inhalt:
1 | ###############################################################################
|
2 | # Makefile for the project Nautiksteuerung
|
3 | ###############################################################################
|
4 |
|
5 | ## General Flags
|
6 | PROJECT = Nautiksteuerung
|
7 | MCU = atmega162
|
8 | TARGET = Nautiksteuerung.elf
|
9 | CC = avr-gcc
|
10 |
|
11 | ## Options common to compile, link and assembly rules
|
12 | COMMON = -mmcu=$(MCU)
|
13 |
|
14 | ## Compile options common for all C compilation units.
|
15 | CFLAGS = $(COMMON)
|
16 | CFLAGS += -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
|
17 | CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
|
18 |
|
19 | ## Assembly specific flags
|
20 | ASMFLAGS = $(COMMON)
|
21 | ASMFLAGS += $(CFLAGS)
|
22 | ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
|
23 |
|
24 | ## Linker flags
|
25 | LDFLAGS = $(COMMON)
|
26 | LDFLAGS += -Wl,-Map=Nautiksteuerung.map
|
27 |
|
28 |
|
29 | ## Intel Hex file production flags
|
30 | HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature
|
31 |
|
32 | HEX_EEPROM_FLAGS = -j .eeprom
|
33 | HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
|
34 | HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings
|
35 |
|
36 |
|
37 | ## Objects that must be built in order to link
|
38 | OBJECTS = Nautiksteuerung.o
|
39 |
|
40 | ## Objects explicitly added by the user
|
41 | LINKONLYOBJECTS =
|
42 |
|
43 | ## Build
|
44 | all: $(TARGET) Nautiksteuerung.hex Nautiksteuerung.eep Nautiksteuerung.lss size
|
45 |
|
46 | ## Compile
|
47 | Nautiksteuerung.o: ../Nautiksteuerung.c
|
48 | $(CC) $(INCLUDES) $(CFLAGS) -c $<
|
49 |
|
50 | ##Link
|
51 | $(TARGET): $(OBJECTS)
|
52 | $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
|
53 |
|
54 | %.hex: $(TARGET)
|
55 | avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
|
56 |
|
57 | %.eep: $(TARGET)
|
58 | -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
|
59 |
|
60 | %.lss: $(TARGET)
|
61 | avr-objdump -h -S $< > $@
|
62 |
|
63 | size: ${TARGET}
|
64 | @echo
|
65 | @avr-size -C --mcu=${MCU} ${TARGET}
|
66 |
|
67 | ## Clean target
|
68 | .PHONY: clean
|
69 | clean:
|
70 | -rm -rf $(OBJECTS) Nautiksteuerung.elf dep/* Nautiksteuerung.hex Nautiksteuerung.eep Nautiksteuerung.lss Nautiksteuerung.map
|
71 |
|
72 |
|
73 | ## Other dependencies
|
74 | -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
|
Meine Frage nun, was mache ich falsch?
Gruss
Gerald