PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : srf08 MEGA32 Programmieren in C



B.Rust
28.10.2004, 17:45
Ich bin noch der totale Noob und will den srf08 an den Mega 32 anschließen. Ich hab mir nen Beispielprogramm runtergeladen, aber ne fette fehlermeldung:



-------- begin --------
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling: srf08.c
avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=srf08.lst -std=gnu99 srf08.c -o srf08.o

Linking: srf08.elf
avr-gcc -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=srf08.o -std=gnu99 srf08.o --output srf08.elf -Wl,-Map=srf08.map,--cref -lm
C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\lib\avr5\crtm32.o(.i nit9+0x0): undefined reference to `main'
srf08.o(.text+0x4): In function `srf08_init':
C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:25: undefined reference to `i2c_init'
srf08.o(.text+0x8):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:26: undefined reference to `i2c_start'
srf08.o(.text+0x10):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:26: undefined reference to `i2c_transmit'
srf08.o(.text+0x16):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:27: undefined reference to `i2c_transmit'
srf08.o(.text+0x1c):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:28: undefined reference to `i2c_transmit'
srf08.o(.text+0x20):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:31: undefined reference to `i2c_start'
srf08.o(.text+0x28):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:32: undefined reference to `i2c_transmit'
srf08.o(.text+0x30):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:33: undefined reference to `i2c_stop'
srf08.o(.text+0x48): In function `srf08_set_gain':
C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:44: undefined reference to `i2c_start'
srf08.o(.text+0x50):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:44: undefined reference to `i2c_transmit'
srf08.o(.text+0x56):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:45: undefined reference to `i2c_transmit'
srf08.o(.text+0x5c):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:46: undefined reference to `i2c_transmit'
srf08.o(.text+0x60):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:47: undefined reference to `i2c_stop'
srf08.o(.text+0x82): In function `srf08_set_range':
C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:57: undefined reference to `i2c_start'
srf08.o(.text+0x8a):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:57: undefined reference to `i2c_transmit'
srf08.o(.text+0x90):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:58: undefined reference to `i2c_transmit'
srf08.o(.text+0x96):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:59: undefined reference to `i2c_transmit'
srf08.o(.text+0x9a):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:60: undefined reference to `i2c_stop'
srf08.o(.text+0xac): In function `srf08_ping':
C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:74: undefined reference to `i2c_start'
srf08.o(.text+0xb4):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:74: undefined reference to `i2c_transmit'
srf08.o(.text+0xba):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:75: undefined reference to `i2c_transmit'
srf08.o(.text+0xc0):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:76: undefined reference to `i2c_transmit'
srf08.o(.text+0xc4):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:79: undefined reference to `i2c_start'
srf08.o(.text+0xcc):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:80: undefined reference to `i2c_transmit'
srf08.o(.text+0xd2):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:81: undefined reference to `i2c_stop'
srf08.o(.text+0xda):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:85: undefined reference to `i2c_start'
srf08.o(.text+0xe2):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:85: undefined reference to `i2c_transmit'
srf08.o(.text+0xe8):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:86: undefined reference to `i2c_transmit'
srf08.o(.text+0xec):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:87: undefined reference to `i2c_start'
srf08.o(.text+0xf6):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:87: undefined reference to `i2c_transmit'
srf08.o(.text+0xfc):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:88: undefined reference to `i2c_receive'
srf08.o(.text+0x104):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:89: undefined reference to `i2c_receive'
srf08.o(.text+0x10a):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:90: undefined reference to `i2c_stop'
srf08.o(.text+0x124): In function `srf08_read_register':
C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:104: undefined reference to `i2c_start'
srf08.o(.text+0x12c):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:104: undefined reference to `i2c_transmit'
srf08.o(.text+0x132):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:105: undefined reference to `i2c_transmit'
srf08.o(.text+0x136):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:106: undefined reference to `i2c_start'
srf08.o(.text+0x140):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:106: undefined reference to `i2c_transmit'
srf08.o(.text+0x14a):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:109: undefined reference to `i2c_receive'
srf08.o(.text+0x152):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:112: undefined reference to `i2c_receive'
srf08.o(.text+0x158):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:114: undefined reference to `i2c_stop'
srf08.o(.text+0x16a): In function `srf08_change_i2c_address':
C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:125: undefined reference to `i2c_start'
srf08.o(.text+0x172):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:125: undefined reference to `i2c_transmit'
srf08.o(.text+0x178):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:126: undefined reference to `i2c_transmit'
srf08.o(.text+0x17e):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:127: undefined reference to `i2c_transmit'
srf08.o(.text+0x182):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:128: undefined reference to `i2c_stop'
srf08.o(.text+0x186):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:130: undefined reference to `i2c_start'
srf08.o(.text+0x18e):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:130: undefined reference to `i2c_transmit'
srf08.o(.text+0x194):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:131: undefined reference to `i2c_transmit'
srf08.o(.text+0x19a):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:132: undefined reference to `i2c_transmit'
srf08.o(.text+0x19e):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:133: undefined reference to `i2c_stop'
srf08.o(.text+0x1a2):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:135: undefined reference to `i2c_start'
srf08.o(.text+0x1aa):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:135: undefined reference to `i2c_transmit'
srf08.o(.text+0x1b0):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:136: undefined reference to `i2c_transmit'
srf08.o(.text+0x1b6):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:137: undefined reference to `i2c_transmit'
srf08.o(.text+0x1ba):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:138: undefined reference to `i2c_stop'
srf08.o(.text+0x1be):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:140: undefined reference to `i2c_start'
srf08.o(.text+0x1c6):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:140: undefined reference to `i2c_transmit'
srf08.o(.text+0x1cc):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:141: undefined reference to `i2c_transmit'
srf08.o(.text+0x1d2):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:142: undefined reference to `i2c_transmit'
srf08.o(.text+0x1d6):C:\Dokumente und Einstellungen\blak299321\Desktop\srf08_test_progra m_for_gcc_and_avr/srf08.c:143: undefined reference to `i2c_stop'
make : *** [srf08.elf] Error 1

> Process Exit Code: 2

Dino Dieter
28.10.2004, 18:14
Hallo

Ich tippe mal darauf, das du die I2C Datei nicht mit eingebunden hast, oder der Pfad dahin nicht stimmt. Das heißt er findet die ganzen I2C Funktionen nicht.

Aber ohne Code, kann man da wenig zu sagen.

MFG
Dieter

Pascal
28.10.2004, 18:16
das sieht sehr danach aus, dass du die I²C-Befehle verwendest, ohne die entsprechende Datei einzubinden
ich schätz mal, dass du wissen willst, wie du das richtig machst, dafür müsstest du aber deinen Code posten

du könntest aber schonmal schauen, ob du die richtige Datei für I²C eingebunden hast, was aber eigentlich nicht sein dürfte...

digiTux
28.10.2004, 21:31
Hallo,

es stimmt eine ganze Menge nicht:

1)
Es wird keine C-Quelldatei uebersetzt, in der die main() Funktion
enthalten ist bzw. das erzeugte Objektfile wird beim linken nicht
beachtet (crtm32.o(.init9+0x0): undefined reference to `main')
Die Datei crtm32.o initialisiert vordefinierte Variablen und springt
anschliessend main() an. Bei dir fehlt aber main().

2)
Der Linker hat keinen Pfad zur AVR-LIBC mit den I²C-Funktionen
(undefined reference to `i2c_xxx'). Da gibt es eine weitere Option
fuer Linker, mit der er angewiesen wird die STDLIB zu verwenden.
-> Poste mal dein Makefile.

Prinzipiell werden deine C-Dateien richtig übersetzt. Es knirscht im
2. Schritt, dem Linken. Hier werden die einzelnen Objektdateien der
jeweiligen C-Quelldateien zu einer Datei zusammengebunden. Das
Ergebnis des Linkers kann dann vom AVR ausgeführt werden.

Grüße
Markus