PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : undefined refernce



µautonom
27.03.2008, 12:39
Hallo, versuche hier ein kleines tesprogramm mit dem AVR Studio zu compilieren AVR GCC ist installiert.


#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>

int main (void) {

DDRC = 0xff;
PORTC = 0x03;
while(1) {


}

return 0;
}


Problem ist es kommt immer undefindet reference sbi oder outp..... hab aber nirgends im Code die Befehle verwendet!. Hab gehört das der neue GCC diese nicht ünterstützt.


Build started 27.3.2008 at 12:31:31
avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -O0 -MD -MP -MT Test2.o -MF dep/Test2.o.d -c ../Test2.c
avr-gcc.exe -mmcu=atmega16 Programm.o Test2.o -o Programm.elf
Test2.o: In function `main':
C:\Dokumente und Einstellungen\putkin\Eigene Dateien\default/../Test2.c:3: multiple definition of `main'
Programm.o:C:\Dokumente und Einstellungen\putkin\Eigene Dateien\default/../Programm.c:6: first defined here
Programm.o: In function `main':
Programm.c: (.text+0x18): undefined reference to `outp'
Programm.c: (.text+0x2a): undefined reference to `sbi'
make: *** [Programm.elf] Error 1
Build failed with 2 errors and 0 warnings...


Was muss ich tun damit er eien Hex erstellt?

Hoffe sowas würde nicht schon hundertmal gefragt :) , wenn tuts mir leid.

Mfg

askazo
27.03.2008, 12:52
sbi und outp werden schon recht lange nicht mehr vom GCC unterstützt.
Du könntest Dir das ganze selber definieren:

#define sbi(ADDRESS,BIT) (ADDRESS |= (1<<(BIT)))
#define outp(VALUE, ADDRESS) (ADDRESS = VALUE)

Allerdings hast Du noch ein anderes Problem:

C:\Dokumente und Einstellungen\putkin\Eigene Dateien\default/../Test2.c:3: multiple definition of `main'

Scheinbar hast Du in Deinem Code 2 Funktionen, die "main" heißen.
Irgendwie hast Du da wohl 2 Projekte zusammengewürfelt oder so.

Gruß,
askazo

µautonom
27.03.2008, 13:03
Hi, anscheinend sind wirklich zwei Projekte aneinander geraten. Jetzt funktionierts.

Kannst du mir sagen wo ic hdei Hex-Datei finde? In dnem Projektordner finde ich nur die .c-Datei.



rm -rf FH.o FH.elf dep/* FH.hex FH.eep
Build succeeded with 0 Warnings...
avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -O0 -MD -MP -MT FH.o -MF dep/FH.o.d -c ../FH.c
avr-gcc.exe -mmcu=atmega16 FH.o -o FH.elf
avr-objcopy -O ihex -R .eeprom FH.elf FH.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex FH.elf FH.eep || exit 0



Build started 27.3.2008 at 13:02:50

AVR Memory Usage
----------------
Device: atmega16

Program: 174 bytes (1.1% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...



EDIT:/ Hab sie gefunden. Sind nur sbi outp un cbi betroffen oder gibt es noch weitere Befhele die AVR GCC nicht mehr unterstützt. Kann man das irgendwo nachlesen?

Mfg

askazo
27.03.2008, 14:06
Soweit ich weiß waren das nur sbi (Set Bit), cbi (Clear Bit), outp (Register beschreiben) und inp (Register auslesen).
outp und inp solltest Du generell nicht mehr verwenden, das geht ja mitlerweile mit einfacher Zuweisung.
sbi und cli definiere ich mir immer selber, da man das immer wieder braucht und den Code übersichtlicher macht.
Definition für cbi:

#define cbi(ADDRESS,BIT) (ADDRESS &= ~(1<<(BIT)))

Gruß,
askazo

µautonom
27.03.2008, 14:29
Hi hab da noch ne Frage, anscheinend ist mein Mikrocontroller kaputt.

Wenn man ein Portpin setzt, müssten ungefähr 5V geschaltet werden?
An den anderen Pins vom selber Port liegen 0,45V an...

Da müsste doch eigentlich nix anliegen oder?

Mfg µautonom

uwegw
27.03.2008, 15:13
Kommt auf dem Strom an, den der Pin ziehen muss. Bei 5V VCC und 20mA Strom dürfen es bis zu 0,7V sein.

µautonom
27.03.2008, 15:35
Hi, hm es dürfte aber doch keine Spannung am Ausgang anliegen, wenn der Pin nicht gesetzt wurde, sonst hätte man ja unbestimmte Zustände oder sprichst du vom gesetzten Pin?

Die Leds die ich am PORTC drangehängen, haben alle einen 1k Vorwiderstand zusätzlich sidn alle an einem 74HCT245 mit 3,3k verbunden der den Port in Ruhelage auf low zieht.

Mfg

askazo
27.03.2008, 15:47
Nein, uwegw hat schon Recht, laut Datenblatt können an einem nicht gesetzten Pin bis zu 0,7V anliegen (schau mal unter Electrical Characteristics -> DC Characteristics -> VOL)
Genauso können bei einem gesetzten Ausgang auch nur 4,2V statt 5,0V rauskommen.
Einen unbestimmten Zustand hat man dadurch nicht. Bei sämtlichen Logikfamilien gibt es einen maximalen bzw. minimalen Spannungswert, bei dem ein Signal als Low bzw. High angesehen wird.

Gruß,
askazo

µautonom
27.03.2008, 17:00
Ah dankeschön, wieder was dazu gelernt :D

Mfg