Hallo,
zur Zeit bin ich dabei eine Projekt-Arbeit im AVR Studio zum laufen zu
bekommen.
Seither nutzte ich das Programmers-Notepad, welches bei WinAVR dabei
war.
Als ich nun dabei war, den Code in ein AVR Studio Projekt zu übertragen,
stieß ich überraschenderweise auf ein Problem, welches ich mir in der
Art nicht erklären kann.
Ich hab mir zur Fehlersuche ein Beispielprojekt gebaut, welches exakt
diesen Fehler provoziert und so ziemlich dem fehlerhaften Teil in meinem
echt Projekt entspricht.
Der Compiler des Studio's gibt mir im Message-Fenster die Meldung aus:
1 | gcc plug-in: Error: Object file not found on expected location C:\Dokumente und Einstellungen\jh\Eigene Dateien\atmega128_code_samples\main\default\main.elf
|
Das Build-Fenster meldet:
1 | rm -rf main.o function.o main.elf dep/* main.hex main.eep
|
2 | Build succeeded with 0 Warnings...
|
3 | avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -O0 -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c
|
4 | avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -O0 -MD -MP -MT function.o -MF dep/function.o.d -c ../function.c
|
5 | avr-gcc.exe -mmcu=atmega16 main.o function.o -o main.elf
|
6 | function.o: In function `test':
|
7 | ../function.c:4: multiple definition of `test'
|
8 | main.o:../function.c:4: first defined here
|
9 | make: *** [main.elf] Error 1
|
10 | Build succeeded with 0 Warnings...
|
Ich lege als Anhang das gepackte Projekt noch bei und hoffe, dass mir
jemand einen guten Tipp geben kann, wie ich das Problem lösen kann, ohne
alle meine Funktionen in die main.c zu packen
Vielen Dank
Edit:
Da aus irgendeinem Grund der Datei Upload nicht funktioniert poste ich
hier den Quelltext.
main.c
1 | #include "function.c"
|
2 | #include <inttypes.h>
|
3 |
|
4 |
|
5 | int main(void)
|
6 | {
|
7 | uint16_t adwert;
|
8 | while(1)
|
9 | {
|
10 | adwert++; // Zähler aufaddieren
|
11 |
|
12 | adwert = test(adwert); // Funktion aufrufen
|
13 | }
|
14 |
|
15 | }
|
function.c
1 | #include "header.h"
|
2 |
|
3 | extern uint16_t test (uint16_t zahl) // Funktion die einen 16 Bit Wert zurück gibt
|
4 | { // nachdem ein 16 Bit Wert empfangen wurde
|
5 |
|
6 | if(zahl > 1024) // Zähler vergleichen und bei 1025
|
7 | zahl=0; // auf 0 zurück setzen.
|
8 |
|
9 | return zahl;
|
10 | }
|
header.h
1 | #include <inttypes.h>
|
2 |
|
3 | extern uint16_t test(uint16_t);
|