-         

Ergebnis 1 bis 6 von 6

Thema: UART beispiel lässt sich nicht kompellieren...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2008
    Beiträge
    26

    UART beispiel lässt sich nicht kompellieren...

    Anzeige

    also ich hab jetzt das UART beispiel aus dem Wiki genommen und auf mein board (myavr mit mega abgestimmt, aber jetzt lässt sich das beispiel nicht compelieren, aber das wollt es vorher auch nicht...

    bei dem board ist ein schon kompeliertes beispiel dabei, es funktioniert auch einwandfrei nur code hab ich leider keinen.

    ich währ euch sehr dankbar wenn mir wer helfen könnte...

    uart.c :
    Code:
    #include "uart.h"
    
    #define BAUDRATE 9600UL //Definition als unsigned long, sonst gibt es Fehler in der Berechnung
    
    void uart_init()
    {
        uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*BAUDRATE) - 1);
     
        UBRRH = (uint8_t) (ubrr>>8);
        UBRRL = (uint8_t) (ubrr);
     
        // UART Receiver und Transmitter anschalten 
        // Data mode 8N1, asynchron 
        UCSRB = (1 << RXEN) | (1 << TXEN);
        UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
    
        // Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte) 
        do
        {
            UDR;
        }
        while (UCSRA & (1 << RXC));
    }
    uart.h :
    Code:
    #ifndef _UART_H_
    #define _UART_H_
    
    #include <avr/io.h>
    
    extern void uart_init();
    
    static inline int
    uart_putc (const uint8_t c)
    {
        // Warten, bis UDR bereit ist für einen neuen Wert 
        while (!(UCSRA & (1 << UDRE)))
            ;
    
        // UDR Schreiben startet die Übertragung 
        UDR = c;
    
        return 1;
    }
    
    static inline uint8_t
    uart_getc_wait()
    {
        // Warten, bis etwas empfangen wird 
        while (!(UCSRA & (1 << RXC)))
            ;
    
        // Das empfangene Zeichen zurückliefern 
        return UDR;
    }
    
    static inline int
    uart_getc_nowait()
    {
        // Liefer das empfangene Zeichen, falls etwas empfangen wurde; -1 sonst 
        return (UCSRA & (1 << RXC)) ? (int) UDR : -1;
    }
    
    #endif /* _UART_H_  */
    das Makefile:
    Code:
    ###############################################################################
    # Makefile for the project uarttest
    ###############################################################################
    
    ## General Flags
    PROJECT = uarttest
    MCU = atmega8
    TARGET = uarttest.elf
    CC = avr-gcc
    
    ## Options common to compile, link and assembly rules
    COMMON = -mmcu=$(MCU)
    
    ## Compile options common for all C compilation units.
    CFLAGS = $(COMMON)
    CFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=3686400UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
    CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d 
    
    ## Assembly specific flags
    ASMFLAGS = $(COMMON)
    ASMFLAGS += $(CFLAGS)
    ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
    
    ## Linker flags
    LDFLAGS = $(COMMON)
    LDFLAGS +=  -Wl,-Map=uarttest.map
    
    
    ## Intel Hex file production flags
    HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature
    
    HEX_EEPROM_FLAGS = -j .eeprom
    HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
    HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings
    
    
    ## Objects that must be built in order to link
    OBJECTS = uart.o 
    
    ## Objects explicitly added by the user
    LINKONLYOBJECTS = 
    
    ## Build
    all: $(TARGET) uarttest.hex uarttest.eep uarttest.lss size
    
    ## Compile
    uart.o: ../uart.c
    	$(CC) $(INCLUDES) $(CFLAGS) -c  $<
    
    ##Link
    $(TARGET): $(OBJECTS)
    	 $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
    
    %.hex: $(TARGET)
    	avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@
    
    %.eep: $(TARGET)
    	-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
    
    %.lss: $(TARGET)
    	avr-objdump -h -S $< > $@
    
    size: ${TARGET}
    	@echo
    	@avr-size -C --mcu=${MCU} ${TARGET}
    
    ## Clean target
    .PHONY: clean
    clean:
    	-rm -rf $(OBJECTS) uarttest.elf dep/* uarttest.hex uarttest.eep uarttest.lss uarttest.map
    
    
    ## Other dependencies
    -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
    Und jetzt das was er beim compelieren ausgibt:
    Code:
    rm -rf uart.o  uarttest.elf dep/* uarttest.hex uarttest.eep uarttest.lss uarttest.map
    Build succeeded with 0 Warnings...
    avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=3686400UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT uart.o -MF dep/uart.o.d  -c  ../uart.c
    avr-gcc -mmcu=atmega8 -Wl,-Map=uarttest.map uart.o     -o uarttest.elf
    
    //bis hier passt noch alles aber mit dem kann ich nichts anfangen...
    
    e:/winavr-20081205/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr4/crtm8.o:(.init9+0x0): undefined reference to `main'
    make: *** [uarttest.elf] Error 1
    Build failed with 1 errors and 0 warnings...
    danke schon im voraus lg mystboy

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der UART code ist noch kein vollständiges Programm. Das ist mehr dazu gedacht, um es per #include einzubinden.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2008
    Beiträge
    26
    aso das wusste ich nicht ...
    1.frage was muss ich noch machen damit er funktioniert?
    2.frage sollte er sich nicht trotsdem kompelieren lassen?

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das Compilieren seber geht ja auch noch. Der Fehler kommt erst beim Linker.

    Damit man ein vollständiges Programm hat braicht man eine Funktion "main" , damit µC weiss womit das Programm anfangen soll. Da müßte dann ggf auch noch sinnvoller code rein, wenn sich was tun soll.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2008
    Beiträge
    26
    ok danke werd ich gleich probieren...
    soll ich eine neue main.c mit der main funktion erstellen oder in die uart.c reinschreiben

  6. #6
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91
    HI

    hier gibts ganz schöne beispiel codes:
    http://www.roboternetz.de/wissen/ind...ourcevergleich

    KR-500

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •