logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak w Eclipse 3.2 (YAGARTO) wygenerować plik .bin zamiast .hex?

august_a 20 Lut 2007 21:20 2521 7
  • #1 3597036
    august_a
    Poziom 21  
    Posty: 572
    Pomógł: 32
    Ocena: 4
    Witam,
    Mam pytanie jak zrobić w środowisku Eclipse (YAGARTO) aby podczas kompilacji tworzył mi plik .bin a nie .hex??
    proszę o jakieś wskazówki.
    Pozdrawiam
    Artur

    P.S.
    W załączniku przesyłam mój makefile
    Załączniki:
    • makefile.txt (11.25 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #2 3597103
    TWl
    Poziom 21  
    Posty: 337
    Pomógł: 42
    Ocena: 133
    Juz wiecej pierdol w tym makefilu to sie chyba nie dalo umiescic :/ i ciezko go przeedytowac. W kazdym razie binarke mozesz zrobic z ELFa poleceniem:

    arm-elf-objcopy -O binary plik_wyjsciowy.elf plik_wyjsciowy.bin
  • #3 3597163
    august_a
    Poziom 21  
    Posty: 572
    Pomógł: 32
    Ocena: 4
    Możesz mi udostępnić jakiegoś normalnego makefile??
  • #4 3597844
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    Nic prostrzego :)
    W makefile w linii :

    
    ## Output format. (can be ihex or binary)
    #FORMAT = ihex
    FORMAT = binary



    FORMAT =binary, wynikowy plik bedzie w postaci binarnej.
  • #5 3597927
    TWl
    Poziom 21  
    Posty: 337
    Pomógł: 42
    Ocena: 133
    adamusx napisał:
    Nic prostrzego :)
    W makefile w linii (...)

    Spoko. Tylko ten make ma ich 431. Troche trzeba poszukac. Przyzwyczailem sie do prostszych make'ow ;), np:

    
    OUTPUT = test
    
    OBJS=main.o crt0.o uart.o i2cmaster.o i2cslave.o arch_arm.o ad9980.o ddc_comm.o ddcci_controls.o cstuff.o
    
    CFLAGS=-mcpu=arm7tdmi -DROM_RUN -O3
    
    
    all:    $(OBJS)
            arm-elf-ld -s -T LPC2103-ROM.ld $(OBJS) -o $(OUTPUT).elf
            arm-elf-objcopy -O binary $(OUTPUT).elf $(OUTPUT).bin
    
    arch_arm.o:     arch_arm.c
            arm-elf-gcc $(CFLAGS) -mthumb-interwork -c $^
    
    %.o:    %.c
            arm-elf-gcc $(CFLAGS) -c $^
    
    %.o:    %.S
            arm-elf-gcc $(CFLAGS) -c $^
    
    clean:
            rm -f $(OUTPUT).elf $(OUTPUT).hex $(OBJS) $(OUTPUT).bin
    
    isp:
            lpc21isp -bin -control $(OUTPUT).bin /dev/ttyS0 38400 12000
    
    run:    all isp
    
  • #6 3598479
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    TWI Ty piszesz pod Linuxem, nie wiem czy taki prosty makefile bedzie poprawny dla WinARMa.
    Tam we wszystkch przykładach są dosc rozbudowane makefile.

    A gdzie w swoim makefile okreslasz np tryb pracy (THUMB/ARM) itp?
  • #7 3598637
    august_a
    Poziom 21  
    Posty: 572
    Pomógł: 32
    Ocena: 4
    Witam,
    Właśnie mi chodzi o coś co będzie działać pod WinARM lub ECLIPSE...
    Pozdrawiam
    Arur
  • #8 3601624
    Mariusz7400
    Poziom 11  
    Posty: 11
    Załączam plik Makefile z projektu ( WinArm) z którym się męczę LPCUSB. Sprawdziłem ze wystarczy gdy w
    # Tool flags
    zmienię
    CPFLAGS = -O ihex
    na
    CPFLAGS = -O bin

    oraz w
    $(EXAMPLES):
    w linii
    $(CP) $(CPFLAGS) $@.elf $@.hex
    zmienić hex na bin

    Dodano po 6 [minuty]:

    Z jakichś przyczyn nie podpięło załącznika. Wrzucę go w tekście - mam nadzieję że to zgodne z zasadami :)

    LIBNAME = ../usbstack
    APPNAME = main

    # Tool definitions
    CC = arm-elf-gcc
    LD = arm-elf-ld -v
    AR = arm-elf-ar
    AS = arm-elf-as
    CP = arm-elf-objcopy
    OD = arm-elf-objdump
    RM = rm

    # Tool flags
    CFLAGS = -I./ -I../ -c -W -Wall -Os -g -DDEBUG -mcpu=arm7tdmi
    ASFLAGS = -ahls -mapcs-32 -o crt.o
    LFLAGS = -nostartfiles --warn-common
    CPFLAGS = -O ihex
    ODFLAGS = -x --syms

    LINKFILE = lpc2148-rom.ld

    CSRCS = startup.c printf.c console.c
    OBJS = crt.o $(CSRCS:.c=.o)

    EXAMPLES = hid serial msc custom
    #EXAMPLES = printf

    all: depend $(EXAMPLES)

    hid: $(OBJS) main_hid.o $(LIBNAME).a
    serial: $(OBJS) main_serial.o serial_fifo.o armVIC.o $(LIBNAME).a
    msc: $(OBJS) main_msc.o msc_bot.o msc_scsi.o blockdev_sd.o lpc2000_spi.o $(LIBNAME).a
    custom: $(OBJS) main_custom.o $(LIBNAME).a
    printf: $(OBJS) printf.o

    $(EXAMPLES):
    @ echo "Building $@ example..."
    $(CC) -T $(LINKFILE) $(LFLAGS) $^ -o $@.elf -Wl,-Map,$@.map
    $(CP) $(CPFLAGS) $@.elf $@.hex
    $(OD) $(ODFLAGS) $@.elf > $@.dmp

    crt.o: crt.s
    @ echo ".assembling"
    $(CC) -c $(AFLAGS) -Wa,-ahlms=crt.lst crt.s -o crt.o

    clean:
    rm -f *.hex *.elf *.o *.lst *.dmp *.map .depend

    # recompile if the Makefile changes
    $(OBJS): Makefile

    # dependency checking
    depend: $(CSRCS)
    $(CC) $(CFLAGS) -MM $^ > .depend || rm -f .depend

    # phony targets
    .PHONY: clean

    -include .depend

Podsumowanie tematu

✨ W dyskusji poruszono problem generowania pliku .bin zamiast .hex w środowisku Eclipse 3.2 z toolchainem YAGARTO podczas kompilacji. Zaproponowano użycie narzędzia arm-elf-objcopy z parametrem -O binary do konwersji pliku ELF na plik binarny. Wskazano również, że w makefile można zmienić ustawienie formatu wyjściowego z "ihex" na "binary" poprzez modyfikację zmiennej FORMAT lub CPFLAGS. Przykładowy prosty makefile zawiera regułę, która po linkowaniu generuje plik ELF, a następnie konwertuje go na plik .bin za pomocą arm-elf-objcopy. Podkreślono, że bardziej rozbudowane makefile, np. dla WinARM, wymagają odpowiednich modyfikacji, takich jak zmiana opcji w CPFLAGS z -O ihex na -O bin oraz zmiana rozszerzenia pliku wynikowego z .hex na .bin w regułach kopiowania. Dyskusja dotyczyła także kompatybilności makefile z różnymi środowiskami (Linux, WinARM) oraz ustawień kompilatora i linkera dla architektury ARM7TDMI.
Wygenerowane przez model językowy.
REKLAMA