Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ZL25ARM][STR912FAW44]Debugowanie - czy możliwe?

12 Mar 2009 08:19 7417 54
  • Poziom 10  
    Witam
    Jestem początkującym programistą ARM. Udało mi się nieco pokombinować za pomocą RIDE, IAR jednak problemy zaczęły się gdy chciałem swoje programy zdebugować. Kombinowałem na wiele sposobów, nawet kupiłem książkę Pana Bryndzy i kroczek po kroczku robiłem tak jak on. W swojej książce wspomina on o różnych interfejsach BF-20 itd itp. Ja mam z kamami ZL18PRG - Czy da się tym debugować przez LPT? Ręce mi już opadają - openocd odmawia posłuszeństwa i wali błędami. Programy sugerowane przez ST (RIDE etc.) szukaja kabla na usb. Tak więc czy mogę debugować używając ZL18PRG (FlashLink)?
  • Specjalista - Mikrokontrolery
    Ride obsluguje jedynie RLinka, IAR ma tez swoj adapter. Jakimi bledami wali ci openocd i ktora to wersja? Instalowales najnowszy release - 0.1.0? zainstalowales give_io?

    4\/3!!
  • Poziom 10  
    Freddie Chopin napisał:
    Ride obsluguje jedynie RLinka, IAR ma tez swoj adapter. Jakimi bledami wali ci openocd i ktora to wersja? Instalowales najnowszy release - 0.1.0? zainstalowales give_io?

    4\/3!!


    Code:
    C:\Program Files\openocd-r717\bin>openocd-ftd2xx.exe -f jtag.cfg
    
    Open On-Chip Debugger (2008-06-19 19:00) svn: 717
    URL: http://svn.berlios.de/svnroot/repos/openocd/trunk
    Error:   jtag.c:1684 handle_interface_command(): No valid jtag interface found (
    parport)
    Error:   jtag.c:1685 handle_interface_command(): compiled-in jtag interfaces:
    Error:   jtag.c:1688 handle_interface_command(): 0: ft2232
    Info:    options.c:50 configuration_output_handler(): Command parport_port not f
    ound
    Info:    options.c:50 configuration_output_handler(): Command parport_cable not
    found
    Info:    options.c:50 configuration_output_handler(): jtag_khz: 0, 0
    Error:   jtag.c:1511 jtag_interface_init(): JTAG interface has to be specified,
    see "interface" command

    Tutaj akurat użyłem wersji jak widac r717, ale probowalem z wersja 1.0
    wyglac pliku jtag.cfg (musialem sam zrobic):

    Code:

    interface parport
    parport_port 0
    parport_cable flashlink
    jtag_khz 0


    Jesli chodzi o giveio to nie wiem co masz na mysli mowiac zainstalowales. Do tej pory sam giveio.sys byl mi potrzebny do programowania za pomoca programatora Pana Wlostowskiego, ale wtedy wystarczalo ze znajdowal sie w tym samym katalogu co exek.
  • Pomocny post
    Specjalista - Mikrokontrolery
    r717 nie obsluguje w ogole LPT, wiec nawet nie masz co probowac.

    zainstaluj wersje 0.1.0 (nie ma wersji 1.0, wiec nie wiem co zainstalowales), zainstaluje give_io (w instalatorze dla windowsa - plik .msi - znajduje sie to w katalogu drivers), potem probuj dalej.

    4\/3!!
  • Poziom 10  
    Freddie Chopin napisał:
    r717 nie obsluguje w ogole LPT, wiec nawet nie masz co probowac.
    zainstaluj wersje 0.1.0 (nie ma wersji 1.0, wiec nie wiem co zainstalowales), zainstaluje give_io (w instalatorze dla windowsa - plik .msi - znajduje sie to w katalogu drivers), potem probuj dalej.

    Racja - 0.1.0
    Uruchomiłem plik install_giveio.bat i nastepnie status_giveio.bat. Efekt:

    Code:
    C:\Program Files\OpenOCD\0.1.0\drivers\giveio>status_giveio.bat
    
    status of giveio:
    Type:           [0x01] Kernel driver.
    Start Type:     [0x02] Automatic
    Error Control:  [0x01] NORMAL: Display a message box.
    Binary path:    \??\C:\WINDOWS\giveio.sys
    Load order grp:
    Dependencies:
    Start Name:
    ok.


    Stworzylem config flashlink.cfg z zawartoscia taka sama jak w postach powyzej (jtag.cfg) i wydaje sie jakby ruszylo!
    Code:
    C:\Program Files\OpenOCD\0.1.0\bin>openocd.exe -f flashlink.cfg
    
    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src
    /openocd.c $
    RCLK - adaptive
    Error: Translation from khz to jtag_speed not implemented
    Warn : No parport port specified, using default '0x378' (LPT1)
    Error: There are no enabled taps?
    Error: There are no enabled taps?
    Warn : no telnet port specified, using default port 4444
    Warn : no gdb ports allocated as no target has been specified
    Warn : no tcl port specified, using default port 6666


    Na razie tyle mi wystarczy do dalszego kombinowania. Dziękuję za pomoc! Jak mogę się odwdziędzyć? Co dają te 'pomógł' i 'podaruj punkty?
  • Pomocny post
    Specjalista - Mikrokontrolery
    ksymis napisał:
    Jak mogę się odwdziędzyć?


    kliknij 'pomogl' i wystarczy.

    4\/3!!
  • Poziom 10  
    Witam...
    Idąc książką Pana Lucjana Bryndzy:
    1) Uruchomiłem openocd i mogę za pomocą skryptu pythona automatycznie logujacego sie do telneta zaprogramowac binem
    2) Po wycieciu wszystkich opcji z str912.mk (ktory jest includowany w makefile) i zostawieniu sekcji "program:" z instrukcja wywolania skryptu - tez moge zaprogramowac ale biny

    Sprawa rozbija sie o bledy po wykonaniu komendy 'make':
    Code:

    C:\ex2_gpio>make
    arm-elf-gcc -M -Wa,-mapcs-32 -mcpu=arm966e-s -gstabs -DPDEBUG crt0_str912.S > cr
    t0_str912.dep.$$; \
            sed 's,\(crt0_str912\)\.o[ :]*,\1.o crt0_str912.dep : ,g' < crt0_str912.
    dep.$$ > crt0_str912.dep; \
            rm -f crt0_str912.dep.$$
    arm-elf-gcc -M -Wall  -std=gnu99  -I/str91xstdlib/inc/ -Os -mcpu=arm966e-s -g -D
    PDEBUG gpio.c > gpio.dep.$$; \
            sed 's,\(gpio\)\.o[ :]*,\1.o gpio.dep : ,g' < gpio.dep.$$ > gpio.dep; \
            rm -f gpio.dep.$$
    In file included from gpio.c:20:
    91x_map.h:28:22: error: 91x_type.h: No such file or directory
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    Assembling...
    arm-elf-gcc -c -Wa,-mapcs-32 -mcpu=arm966e-s -gstabs -DPDEBUG  crt0_str912.S -o
    crt0_str912.o
    Assembler messages:
    Error: unknown cpu `arm966e-s'
    arm-elf-gcc: crt0_str912.S: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: crt0_str912.S: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: crt0_str912.S: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: crt0_str912.S: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: crt0_str912.S: No such file or directory
    arm-elf-gcc: no input files
    make: *** [crt0_str912.o] Error 1


    Zawartosc pliku makefile:
    Code:
    # Automatic makefile for GNUARM (C/C++)
    

    #tutaj wpisz nazwe pliku hex
    TARGET      = gpio

    #Format wyjsciowy (moze byc elf,hex,bin)
    FORMAT   = bin

    #Optymalizacja [0,1,2,3,s]
    # 0 - brak optymalizacji, s -optymalizacja rozmiaru
    OPT    = s


    #Common flags
    COMMON_FLAGS = -Wall

    #Opcje kompilatora C
    CFLAGS += $(COMMON_FLAGS)
    CFLAGS += -std=gnu99

    #Opcje kompilatora C++
    CXXFLAGS += $(COMMON_FLAGS)

    #Wlaczyc wylaczyc listing
    LISTING = n

    #Wlaczyc wylaczyc debug
    DEBUG = y


    include str912.mk


    Zawartosc pliku str912mk:
    Code:

    # Automatic makefile for GNUARM (C/C++)

    #Typ procesora
    MCU   = arm966e-s

    #Skrypt linkera
    SCRIPTLINK = str912-rom


    #Definicje programow
    CC      = arm-elf-gcc
    CXX   = arm-elf-c++
    AR      = arm-elf-ar
    CP      = arm-elf-objcopy
    OBJDUMP = arm-elf-objdump
    JTAGPROG  = openocd

    OCDSCRIPT=/tmp/pgm.script
    OCD=openocd

    STRLIB_INC = /str91xstdlib/inc/

    LSCRIPT = /scripts/$(SCRIPTLINK).ld


    CFLAGS += -I$(STRLIB_INC)
    CXXFLAGS += -I$(STRLIB_INC)

    #Pozostale ustawienia kompilatora

    ASFLAGS += -Wa,-mapcs-32 -mcpu=$(MCU)
    LDFLAGS +=  -nostartfiles -T$(LSCRIPT) -Wl,-Map=$(TARGET).map,--cref
    CFLAGS  += -O$(OPT) -mcpu=$(MCU)
    CXXFLAGS += -O$(OPT) -mcpu=$(MCU)
    CPFLAGS =  -S


    ifeq ($(LISTING),y)
    ASLST = -Wa,-adhlns=$(<:.S=.lst)
    CLST = -Wa,-adhlns=$(<:.c=.lst)
    CPPLST = -Wa,-adhlns=$(<:.cpp=.lst)
    LSSTARGET = $(TARGET).lss
    endif

    ifeq ($(DEBUG),y)
    CFLAGS += -g -DPDEBUG
    CXXFLAGS += -g -DPDEBUG
    LDFLAGS += -g -DPDEBUG
    ASFLAGS += -gstabs -DPDEBUG
    else
    CFLAGS += -fomit-frame-pointer
    CXXFLAGS += -fomit-frame-pointer
    LDFLAGS += -fomit-frame-pointer
    ASFLAGS += -fomit-frame-pointer
    endif

    ifneq ($(FORMAT),elf)
       CONVTARGET = $(TARGET).$(FORMAT)
    endif


    all:   build

    install: build program

    clean:
       rm -f $(TARGET).hex
       rm -f $(TARGET).elf
       rm -f $(TARGET).map
       rm -f $(TARGET).lss
       rm -f $(TARGET).bin
       rm -f $(OBJ)
       rm -f $(ASRC:.S=.lst) $(SRC:.c=.lst) $(CPPSRC:.cpp=.lst)
       rm -f $(SRC:.c=.dep) $(CPPSRC:.cpp=.dep) $(ASRC:.S=.dep)


    program:
       echo "halt" > $(OCDSCRIPT)
       echo "wait_halt" >> $(OCDSCRIPT)
       echo "sleep 10" >> $(OCDSCRIPT)
       echo "poll" >> $(OCDSCRIPT)
       echo "str9x flash_config 0 4 2 0 0x80000" >> $(OCDSCRIPT)
       echo "flash protect 0 0 2 off" >> $(OCDSCRIPT)
       echo "flash erase_sector 0 0 2"  >> $(OCDSCRIPT)
       echo "flash write_image $(TARGET).elf 0 elf" >> $(OCDSCRIPT)
       echo "reset run" >> $(OCDSCRIPT)
       echo "shutdown" >> $(OCDSCRIPT)
    #   openocd -f ../scripts/str912.cfg
    #   rm -f $(OCDSCRIPT)

         
    build:   $(TARGET).elf $(CONVTARGET) $(LSSTARGET)


    #pliki zrodlowe C
    SRC += $(wildcard *.c)

    #pliki zrodlowe C++
    CPPSRC += $(wildcard *.cpp)

    #pliki assemblerowe
    ASRC += $(wildcard *.S)


    #wszystkie zaleznosci
    $(TARGET).elf: $(OBJ) $(LSCRIPT)
    -include $(SRC:.c=.dep)
    -include $(CPPSRC:.cpp=.dep)
    -include $(ASRC:.S=.dep)

     
    #Objects files
    OBJ = $(SRC:.c=.o) $(CPPSRC:.cpp=.o) $(ASRC:.S=.o)
    # Define all listing files.
    LST = $(SRC:.c=.lst) $(CPPSRC:.cpp=.lst) $(ASRC:.S=.lst)


    %.dep: %.c
       $(CC) -M $(CFLAGS) $< > $@.$$$$; \
       sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
       rm -f $@.$$$$

    %.dep: %.cpp
       $(CXX) -M $(CXXFLAGS) $< > $@.$$$$; \
       sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
       rm -f $@.$$$$

    %.dep: %.S
       $(CC) -M $(ASFLAGS) $< > $@.$$$$; \
       sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
       rm -f $@.$$$$

    %.lss: %.elf
       @echo "Create extended listing..."
       $(OBJDUMP) -h -S $< > $@

    %.hex: %.elf
       @echo "Converting to hex..."
       $(CP) -O ihex $(CPFLAGS) $< $@

    %.bin: %.elf
       @echo "Converting to bin..."
       $(CP) -O binary $(CPFLAGS) $< $@

    %.elf: $(OBJ)
       @echo "Linking..."
       $(CXX) $(CXXFLAGS) $(OBJ) -o $@ $(LDFLAGS)

    %.o : %.S
       @echo "Assembling..."
       $(CC) -c $(ASFLAGS) $(ASLST) $< -o $@


    %.o : %.c   
       @echo "Compiling C..."
       $(CC) -c $(CFLAGS) $(CLST) $< -o $@

    %.o : %.cpp
       @echo "Compiling C++..."
       $(CXX) -c $(CXXFLAGS) $(CPPLST) $< -o $@



    Nie musze mowic ze plik gpio.c oraz crt0_ster912.S sa w katalogu bieżącym z którego wywoływany jest make. Martwi mnie też "unknown cpu".
    Docelowo ma to działać:
    Wpisuje make - kompliuje sie
    Wpisuje make program - wywoluje skrypt pythonowy do zaprogramowania (openocd odpalone w tle od samego poczatku)

    Pozdrawiam i sorry jesli jest cos zawile. Sam sie gubię :D
  • Specjalista - Mikrokontrolery
    jakiego toolchaina uzywasz? moze on nie obsluguje po prostu twojego rdzenia. zainstaluj G++ Lite z CodeSourcery

    4\/3!!
  • Poziom 10  
    Z tym, ze nie widze tam wersji na Winde. A to wszystko pod winda robie.
    Co mam zainstalowane?
    jave (do eclipse)
    eclipse for c/c++
    cygwin
    yagarto (openocd 714)
    YAGARTO GNU ARM toolchain (tego chyba jeszcze nie instalowalem ale mam zamiar - nie jestem pewien bo troszke mi sie miesza)
    no i dzieki Tobie mam openocd w wersji 0.1.0, ktore mi zadzialalo z flashlink na lpt.
    Aktualnie dzieki pomocy kumpla zauwazylem ze ma problem ze znajdowaniem naglowkowych wiec wrzucilem wszystkie do katalogu biezacego (wiem ze syf, ale narazie chce zeby za pomoca jednego polecenia wszystko mi sie robilo, a potem moge sie zajac jak zrobic tak zeby przeszukiwal konkretne katalogi w porzukiwaniu plikow naglowkowych)

    aktualnie bledy sa takie:

    Code:
    C:\ex2_gpio>make
    
    arm-elf-gcc -M -Wa,-mapcs-32 -mcpu=arm966e-s -gstabs -DPDEBUG crt0_str912.S > cr
    t0_str912.dep.$$; \
            sed 's,\(crt0_str912\)\.o[ :]*,\1.o crt0_str912.dep : ,g' < crt0_str912.
    dep.$$ > crt0_str912.dep; \
            rm -f crt0_str912.dep.$$
    arm-elf-gcc -M -Wall  -std=gnu99  -I/str91xstdlib/inc/ -Os -mcpu=arm966e-s -g -D
    PDEBUG gpio.c > gpio.dep.$$; \
            sed 's,\(gpio\)\.o[ :]*,\1.o gpio.dep : ,g' < gpio.dep.$$ > gpio.dep; \
            rm -f gpio.dep.$$
    Compiling C...
    arm-elf-gcc -c -Wall  -std=gnu99  -I/str91xstdlib/inc/ -Os -mcpu=arm966e-s -g -D
    PDEBUG  gpio.c -o gpio.o
    Assembler messages:
    Error: unknown cpu `arm966e-s'
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    arm-elf-gcc: gpio.c: No such file or directory
    arm-elf-gcc: no input files
    make: *** [gpio.o] Error 1


    Czyli caly czas nie widzi jakichs plikow no i nie rozpoznaje rdzenia. Jak nie wpisze zadnego w pliku str912.mk to mowi ze brak informacji. jak wpisze chociazby z wielkich liter czyli ARM966E-S to mowi ze bledna nazwa wiec wydawaloby sie ze powinien lyknac arm966e-s a nie chce.
  • Specjalista - Mikrokontrolery
  • Specjalista - Mikrokontrolery
    pamietaj zeby zmienic potem makefile'a, aby wywolywal arm-none-eabi- ... a nie arm-elf- ...

    4\/3!!
  • Poziom 10  
    Witam
    Tak wiec powyzsze problemy zostaly rozwiazanie poprzez juz teraz w miare swiadoma instalacje "srodowiska". Problemem byla zle skonsturowana sciezka PATH, ktora albo nie podpowiadala gdzie znajduja sie programy, albo podpowiadala nie te co trzeba. Na dzien dzisiejszy moj zestaw wyglada tak:
    - Eclipse (jeszcze debugger nie polaczony z insightem)
    - yagarto
    - yagarto tools
    - openocd 0.1.0
    - czasem flasher pana wlostowskiego
    - Kabel ZL18ARM czyli chyba ST'owski flaslink

    Kompiluje bez problemu, flashuje raz z problemami raz bez, ale idzie. Ale teraz chcialbym zdebugowac 'dzialajacy program'.W zwiazku z tym poszedlem za 'rymitywnym' przykladem z yagarto - czyli wprowadzenie elfa do insight.
    1. Programuje program gpio.bin
    2. Odpalam openocd openocd -f flashlink.cfg -f str912.cfg
    Code:
    C:\openocd>openocd -f flashlink.cfg -f str912.cfg
    
    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release
    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 0
    RCLK - adaptive
    Error: Translation from khz to jtag_speed not implemented
    Warn : No parport port specified, using default '0x378' (LPT1)
    Info : JTAG tap: str912.flash tap/device found: 0x04570041 (Manufacturer: 0x020, Part: 0x4570, Version: 0x0)
    Info : JTAG Tap/device matched
    Info : JTAG tap: str912.cpu tap/device found: 0x25966041 (Manufacturer: 0x020, Part: 0x5966, Version: 0x2)
    Info : JTAG Tap/device matched
    Info : JTAG tap: str912.bs tap/device found: 0x2457f041 (Manufacturer: 0x020, Part: 0x457f, Version: 0x2)
    Error: JTAG tap: str912.bs             got: 0x2457f041 (mfg: 0x020, part: 0x457f, ver: 0x2)
    Error: JTAG tap: str912.bs expected 1 of 1: 0x1457f041 (mfg: 0x020, part: 0x457f, ver: 0x1)
    Error: trying to validate configured JTAG chain anyway...
    Warn : no telnet port specified, using default port 4444
    Warn : no gdb port specified, using default port 3333
    Warn : no tcl port specified, using default port 6666

    3. Odpalam insight komenda arm-elf-insight -x .gdbinit gpio.elf
    Zawartosc .gdbinit:
    Code:
    target remote localhost:3333
    
    monitor reset
    monitor sleep 500
    monitor poll
    monitor soft_reset_halt
    monitor arm7_9 force_hw_bkpts enable
    monitor soft_reset_halt

    Efekty na konsoli openocd:
    Code:
    Info : accepting 'gdb' connection from 0
    
    target state: halted
    target halted in ARM state due to debug-request, current mode: System
    cpsr: 0x200000df pc: 0x000002e0
    Warn : acknowledgment received, but no packet pending
    Error: Translation from khz to jtag_speed not implemented
    Error: Translation from khz to jtag_speed not implemented
    Runtime error, file "embedded:startup.tcl", line 143:
        Info : JTAG tap: str912.flash tap/device found: 0x04570041 (Manufacturer: 0x
    020, Part: 0x4570, Version: 0x0)
    Info : JTAG Tap/device matched
    Info : JTAG tap: str912.cpu tap/device found: 0x25966041 (Manufacturer: 0x020, P
    art: 0x5966, Version: 0x2)
    Info : JTAG Tap/device matched
    Info : JTAG tap: str912.bs tap/device found: 0x2457f041 (Manufacturer: 0x020, Pa
    rt: 0x457f, Version: 0x2)
    Error: JTAG tap: str912.bs             got: 0x2457f041 (mfg: 0x020, part: 0x457f
    , ver: 0x2)
    Error: JTAG tap: str912.bs expected 1 of 1: 0x1457f041 (mfg: 0x020, part: 0x457f
    , ver: 0x1)
    Error: trying to validate configured JTAG chain anyway...
    target state: running
    requesting target halt and executing a soft reset
    target state: halted
    target halted in ARM state due to debug-request, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00000000
    invalid command name "arm7_9_force_hw_bkpts"
    requesting target halt and executing a soft reset
    target state: halted
    target halted in ARM state due to debug-request, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00000000

    Informacja z konsoli gdb (uruchomionej przez program insight:
    Code:

    Translation from khz to jtag_speed not implemented
    Translation from khz to jtag_speed not implemented
    Runtime error, file "embedded:startup.tcl", line 143:
    in procedure 'jtag_rclk' called at file "str912.cfg", line 0
    called at file "embedded:startup.tcl", line 142
    JTAG tap: str912.flash tap/device found: 0x04570041 (Manufacturer: 0x020, Part: 0x4570, Version: 0x0)
    JTAG Tap/device matched
    JTAG tap: str912.cpu tap/device found: 0x25966041 (Manufacturer: 0x020, Part: 0x5966, Version: 0x2)
    JTAG Tap/device matched
    JTAG tap: str912.bs tap/device found: 0x2457f041 (Manufacturer: 0x020, Part: 0x457f, Version: 0x2)
    JTAG tap: str912.bs             got: 0x2457f041 (mfg: 0x020, part: 0x457f, ver: 0x2)
    JTAG tap: str912.bs expected 1 of 1: 0x1457f041 (mfg: 0x020, part: 0x457f, ver: 0x1)
    trying to validate configured JTAG chain anyway...

    target state: running

    requesting target halt and executing a soft reset
    target state: halted
    target halted in ARM state due to debug-request, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00000000

    invalid command name "arm7_9_force_hw_bkpts"
    called at file "command.c", line 456
    called at file "embedded:startup.tcl", line 89
    called at file "embedded:startup.tcl", line 93
    requesting target halt and executing a soft reset
    target state: halted
    target halted in ARM state due to debug-request, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00000000

    (gdb)

    Problem tkwi w 2 rzeczach:
    1) blacha - nie moge zaprogramować urządzenia poprzez debugger - jest ono programowane osobno
    2) chocbym nie wiem ile klikał: Step, Next, Finish Nie mogę wejsc do main tylko jestem w pętli delay. Jedynie continue puszcza program dalej - ale nie o to chodzi

    gpio.c


    Code:
    #include "91x_map.h"
    
    #include "91x_scu.h"
    #include "91x_fmi.h"


    /*----------------------------------------------------------------------*/

    // delay for n cycles
    static void delay(int n)
    {
        while(n--)
       asm volatile ("nop");
    }

    /*----------------------------------------------------------------------*/

    /* Ustawienie parametrow zegarowych */
    //Czestotliwosc 96MHz
    #define PLL_N 192
    #define PLL_M 25
    #define PLL_P 2
    #define SCU_PLLEN 0x80000

    static void setup_pll(void)
    {
        //Jezeli petla jest zsynchronizowana tzn ze jest ok
        if(SCU->SYSSTATUS & SCU_FLAG_LOCK) return;
        //Konfiguracja uruchomienie i synchronizacja PLL
        SCU->PLLCONF = (PLL_P<<16) | (PLL_N<<8) | PLL_M;
        SCU->PLLCONF |= SCU_PLLEN;
        while(~SCU->SYSSTATUS & SCU_FLAG_LOCK);

        //Ustawiamy pamiec flash na dwa cykle oczekiwania (dla 96MHz)
        FMI->CR |= FMI_WRITE_WAIT_STATE_1;
        *(vu16*)FMI_BANK_1 = 0x60;
        *(vu16*)(FMI_BANK_1|FMI_READ_WAIT_STATE_2|FMI_LVD_ENABLE|FMI_PWD_ENABLE|FMI_FREQ_HIGH) = 0x03;

        //Ustawiamy F clk na koncu bedzie z PLL-a
        SCU->CLKCNTR = SCU_EMIBCLK_Div2 | SCU_USBCLK_MCLK2 | SCU_PCLK_Div2;
    }


    /*----------------------------------------------------------------------*/
    /* Ustawienie portow IO */
    static void setup_gpio(void)
    {
        // Wylacz sygnal zerowania dla portu 7 i 3
        SCU->PRR1 |= __GPIO7 | __GPIO3 ;

        //Wlacz sygnal zegarowy dla portu 7 i 3
        SCU->PCGR1 |= __GPIO7 | __GPIO3;

        //Wszystkie wyjscia portu 7 jako push pull
        SCU->GPIOTYPE[7] = 0x0000;

        //Wszystkie wyjscia portu 7 w trybie GPIO
        SCU->GPIOOUT[7]  = 0x5555;

        //Caly port 7 jako wyjsciowy
        GPIO7->DDR = 0xff;
       
       
        //Caly port 3 jako wejscie
        SCU->GPIOIN[3] = 0x00;
       
        //Port 3 jako wejsciowy
        GPIO3->DDR = 0;
    }

    /*----------------------------------------------------------------------*/
    //Funkcja glowna main
    int main(void)
    {
        //Poczatkowe opoznienie (JTAG CACHE)
        delay(1000000);

        //Ustawienie portow gpio
        setup_pll();

        //Ustawienie petli PLL (czestotliwosc 96MHz)
        setup_gpio();

        // petla nieskocznona
        while(1)
        {
           int i;
           for(i=0;i<4;i++)
           {
               // Zalacz wylacz ledy
          GPIO7->DR[0x0f<<2]=(1<<i);
               //Przepisz dane klawiszy na ledy
          GPIO7->DR[0xf0<<2] = ~GPIO3->DR[0xf0<<2];
          // wait a while
          delay(1000000);
               }
        }
        return 0;
    }
  • Specjalista - Mikrokontrolery
    0. W twoim pliku konfiguracyjnym dla STR91x zmień 0x1457f041 na 0x2457f041

    1. Aby zaprogramować procka przez openocd można skorzystać z komendy o mniej więcej takiej składni:

    Code:
    openocd -f interface/twoj_jtag.cfg -f target/twoj_procek.cfg -c "init" -c "reset halt" -c "flash write_image erase twoj_wsad.hex 0 ihex"


    Oczywiście trzeba dostosować do swoich potrzeb, choć może nie będą potrzebne dodatkowe komendy (-c "komenda"). Szczegóły w dokumentacji do openocd.

    2. Twój delay trochę trwa, a instrukcje typu step out rzadko kiedy działają jak trzeba. Może nawet jest to niewykonalne, jesli kompilator całkowicie włączył funkcję delay do maina (a zapewne tak zrobił, bo funkcja jest statyczna).

    Swoją drogą - czemu używasz insight'a a nie debuggowania przez GDB w Eclipse?

    4\/3!!
  • Poziom 10  
    Freddie Chopin napisał:
    0. W twoim pliku konfiguracyjnym dla STR91x zmień 0x1457f041 na 0x2457f041

    1. Aby zaprogramować procka przez openocd można skorzystać z komendy o mniej więcej takiej składni:

    Code:
    openocd -f interface/twoj_jtag.cfg -f target/twoj_procek.cfg -c "init" -c "reset halt" -c "flash write_image erase twoj_wsad.hex 0 ihex"


    Oczywiście trzeba dostosować do swoich potrzeb, choć może nie będą potrzebne dodatkowe komendy (-c "komenda"). Szczegóły w dokumentacji do openocd.

    2. Twój delay trochę trwa, a instrukcje typu step out rzadko kiedy działają jak trzeba. Może nawet jest to niewykonalne, jesli kompilator całkowicie włączył funkcję delay do maina (a zapewne tak zrobił, bo funkcja jest statyczna).

    Swoją drogą - czemu używasz insight'a a nie debuggowania przez GDB w Eclipse?

    4\/3!!


    Ad. 0 Super! Dzieki ;] Jeden Error mniej ;]
    Ad. 1 Tak - tez z niej korzystalem ale ma problem jesli nie wykonam wczesniej zdjecia chyba ochrony pamieci czy cos. Tak czy siak chwilowo uzywam takiego co wpisuje "zaprogramuj -pv gpio.bin' ;] i dziala. Na razie tak lepiej
    Ad. 2 Co moge w tej sytuacji zrobic? Zrezygnowac z tego delay'a i sprawdzic? Probowalem wstawic breakpointa za delay'em i wcisnac continue...ale program wtedy rusza i sobie dziala normalnie, a przeciez to nie main powinien sie zapetlac a petla nieskonczona while.

    Ad 'swoja droga' Dzialalem z Eclipse, ale mialem ten sam problem i nie wiedzialem w czym rzecz, dlatego chcac wykluczyc 'eclipse'a' zdecydowalem sie sprobowac chocby odpalic w insighcie. Docelowo bedzie to pracowac na ecplise i arm-elf-gdb jako gdbserver.
    Przy tej okazji. Czy jest mozliwe:
    1) Komp A (szybka maszyna bez lpt) - eclipse + gdb
    2) Komp B (muł straszny ale ma lpt) - openocd

    I chcialbym sobie pisac i debugowac na kompie A korzystajac z lpt kompa B. Czy biorac pod uwage ze openocd uruchamia sie jako serwer telnetu to jest to mozliwe? Np. zamiast 'localhost' wszedzie (np. w eclipse i gdbinit) wpisac ip kompa B.
  • Specjalista - Mikrokontrolery
    ksymis napisał:
    Ad. 1 Tak - tez z niej korzystalem ale ma problem jesli nie wykonam wczesniej zdjecia chyba ochrony pamieci czy cos. Tak czy siak chwilowo uzywam takiego co wpisuje "zaprogramuj -pv gpio.bin' ;] i dziala. Na razie tak lepiej

    No właśnie - jesli chcesz, to po resecie musisz dorzucic pare komend do zdejmowania tych zabezpieczeń typu -c "mww 0xADDRESS 0xWARTOSC" co pozwoli ci wpisać wartość 0xWARTOSC pod adres 0xADDRESS w pamięci twojego układu.

    Cytat:
    Probowalem wstawic breakpointa za delay'em i wcisnac continue...ale program wtedy rusza i sobie dziala normalnie, a przeciez to nie main powinien sie zapetlac a petla nieskonczona while.

    Może postawiłeś tego breakpointa w miejscu w którym nie ma żadnej instrukcji, przez co debugger takowego breakpointa ignoruje? Nie działem nigdy w Insight, więc nie wiem jak on się zachowa, Eclipse poinformuje, że taki breakpoint został zignorowany. Początkowo zrezygnuj z tego delay'a - jak juz wgłębisz się w sprawę, to sobie go dołożysz.

    Cytat:
    Przy tej okazji. Czy jest mozliwe:
    1) Komp A (szybka maszyna bez lpt) - eclipse + gdb
    2) Komp B (muł straszny ale ma lpt) - openocd

    I chcialbym sobie pisac i debugowac na kompie A korzystajac z lpt kompa B. Czy biorac pod uwage ze openocd uruchamia sie jako serwer telnetu to jest to mozliwe? Np. zamiast 'localhost' wszedzie (np. w eclipse i gdbinit) wpisac ip kompa B.

    Wydaje się to mozliwe, jedynie będzie trzeba zadbać o to, żeby port z którego korzystasz w gdb był odblokowany w firewallu.

    Najprościej jednak wyposażyć się w JTAGa na USB <:

    4\/3!!
  • Poziom 10  
    Freddie Chopin napisał:
    Cytat:
    Probowalem wstawic breakpointa za delay'em i wcisnac continue...ale program wtedy rusza i sobie dziala normalnie, a przeciez to nie main powinien sie zapetlac a petla nieskonczona while.

    Może postawiłeś tego breakpointa w miejscu w którym nie ma żadnej instrukcji, przez co debugger takowego breakpointa ignoruje? Nie działem nigdy w Insight, więc nie wiem jak on się zachowa, Eclipse poinformuje, że taki breakpoint został zignorowany. Początkowo zrezygnuj z tego delay'a - jak juz wgłębisz się w sprawę, to sobie go dołożysz.

    Pomogło. Najpierw usunąłem, a potem spróbowałem bez static i działa. Dzięki
    Freddie Chopin napisał:

    Najprościej jednak wyposażyć się w JTAGa na USB <:

    Ale ich jest cała masa :( Skąd wiadomo gdzie i skąd kupić - tak, żeby był dobry ;] i tani ;]

    No i kolejny problem... W euforii radosci probuje skompilowac kolejny program pana Bryndzy. Najpierw troszkę kodów: (z wycietymi niektorymi komentarzami itd itp)
    game.cpp
    Code:
    #include "91x_map.h"
    
    #include "91x_scu.h"
    #include "91x_fmi.h"
    //#include "gpio.cpp" w pierwotnym piklu game.cpp w ogole nie bylo tej lini
    #include "gpio.h"

    /*----------------------------------------------------------------------*/

    // delay for n cycles
    static void delay(int n)
    {
        while(n--)
       asm volatile ("nop");
    }

    /*----------------------------------------------------------------------*/

    /* Ustawienie parametrow zegarowych */
    //Czestotliwosc 96MHz
    #define PLL_N 192
    #define PLL_M 25
    #define PLL_P 2
    #define SCU_PLLEN 0x80000

    static void  setup_pll(void)
    {
        //Jezeli petla jest zsynchronizowana tzn ze jest ok
        if(SCU->SYSSTATUS & SCU_FLAG_LOCK) return;
        //Konfiguracja uruchomienie i synchronizacja PLL
        SCU->PLLCONF = (PLL_P<<16) | (PLL_N<<8) | PLL_M;
        SCU->PLLCONF |= SCU_PLLEN;
        while(~SCU->SYSSTATUS & SCU_FLAG_LOCK);

        //Ustawiamy pamiec flash na dwa cykle oczekiwania (dla 96MHz)
        FMI->CR |= FMI_WRITE_WAIT_STATE_1;
        *(vu16*)FMI_BANK_1 = 0x60;
        *(vu16*)(FMI_BANK_1|FMI_READ_WAIT_STATE_2|FMI_LVD_ENABLE|FMI_PWD_ENABLE|FMI_FREQ_HIGH) = 0x03;

        //Ustawiamy F clk na koncu bedzie z PLL-a
        SCU->CLKCNTR = SCU_EMIBCLK_Div2 | SCU_USBCLK_MCLK2 | SCU_PCLK_Div2;
    }


    /*----------------------------------------------------------------------*/
    //Klasa odczytujaca stan wybranego przycisku w zestawie ZL25ARM
    class key
    {
    public:
            //Numer przycisku
            enum keyNo {key1=0x10,key2=0x20,key3=0x40,key4=0x80};
            //Konstruktor klasy
            key(keyNo id):mGpio(gpioPort::Gpio3),mMask((uint8_t)id) {}
            //Pobierz stan odpowiedniego przycisku
            bool get(void)
            {
                return !mGpio.readIo(mMask);
            }
    private:
            //Klasa portu IO
            gpioPort mGpio;
            //Klasa maski bitowej
            uint8_t mMask;

    };

    /*----------------------------------------------------------------------*/
    //Wirtualna klasa bazowa udostepniajaca mozliwosc wyswietlania
    class dispObj
    {
        public:
            virtual int display(void)=0;
    };


    /*----------------------------------------------------------------------*/
    //Obiekt pilki, ktora moze przemieszczac sie po ekranie
    class ball : public dispObj
    {
        public:
            //Konstruktor inicjalizujacy
            ball():mPos(1) {}
            //Przesun pilke w prawo
            void stepIn(void)
            {
                mPos<<=1;
                if(mPos==0x100)
                {
                    mPos = 0x1;
                }
            }
            //Przesun pilke w lewo
            void stepOut(void)
            {
                if(mPos==1)
                {
                    mPos = 0x80;
                }
                else
                {
                    mPos>>=1;
                }
            }
            //Wyswietl pozycje pilki
            int display(void) { return mPos; }
            //Czy pilka znajduje sie na koncu w prawo
            bool endIn(void) { return mPos & 0x80; }
            //Czy pilka znajduje sie na koncu w lewo
            bool endOut(void) { return mPos & 0x1; }
        private:
            //Prywatne zawierajace pozycje pilki
            uint16_t mPos;

    };

    /*----------------------------------------------------------------------*/
    // Obiekt wyniku gry dziedziczony od objektu ekranowego
    class gameResult: public dispObj
    {
        public:
            //Wybor zwyciezcy
            enum eRes {User1=0xC0,User2=0x3};
            //Ustaw zwyciezce
            void set(eRes result) { mResult = result; }
            //Wyswietl zwyciezce
            int display(void) { return mResult; }
        private:
            //Wartosc zwyciezcy
            uint8_t mResult;
    };

    /*----------------------------------------------------------------------*/
    //Obiekt wyswietlacza
    class display
    {
        public:
            //Konstruktor obiektu
            display():mGpio(gpioPort::Gpio7,0xff) {}
            //Wyswietl obiekt
            void show(dispObj &obj)
            {
                uint8_t v = obj.display();
                mGpio.writeIo(v);
            }
        private:
            //Port IO
            gpioPort mGpio;
    };

    /*----------------------------------------------------------------------*/
    //Klasa gra
    class game
    {
        public:
            //Konstruktor klasy
            game():mK1(key::key1),mK2(key::key4) {}
            //Funkcja stepujaca wywolywana z main
            void step(void);
        private:
            gameResult mResult;     //Wynik gry
            ball mBall;             //Pilka
            key mK1,mK2;            //Przyciski
            display mDisp;
            enum gameState {toOut,toIn,dispWin1,dispWin2 } mState;  //Stan gry
            //Przesuwanie polki w prawo
            void stepIn();
            //Przesywanie pilki w lewo
            void stepOut();
            //Wyswietlanie rezultatu
            void stepResult();
    };

    //Prywatna metoda wywolywana gdy pilka porusza sie w prawo
    void game::stepIn()
    {
            //Przesun pilke o jedna pozycje w prawo
            mBall.stepIn();
            //Czy pilka na brzegu prawej krawdzi
            if(mBall.endIn())
            {
                //Czy klawisz wcisniety
                if(mK2.get())
                {
                   //Tak - pilka odbija sie w strone przeciwnika
                    mState = toOut;
                }
                else
                {
                    //Nie - przegrales wyswietlany jest zwyciezca
                    mState = dispWin1;
                }
            }
            //Pokaz pilke
            mDisp.show(mBall);
    }


    //Prywatna metoda wywolywana gdy pilka porusza sie w lewo
    void game::stepOut()
    {
            //Przesun pilke w lewo
            mBall.stepOut();
            //Czy pilka znajduje sie w lewej krawedzi?
            if(mBall.endOut())
            {
                //Czy wcisniety lewy przycisk
                if(mK1.get())
                {
                   //Tak - odbijaj pilke w prawo
                    mState = toIn;
                }
                else
                {
                    //Nie - przegrales wyswietl wynik
                    mState = dispWin2;
                }
            }
            //Pokaz pilke
            mDisp.show(mBall);
    }

    //Prywatna metoda wyswietlajaca wynik rozgrywek
    void game::stepResult()
    {
        //Sprawdz kto wygral i ustaw tablice wynikow
        if(mState==dispWin1) mResult.set(gameResult::User1);
        else mResult.set(gameResult::User2);
        //Wyswietl tabice wynikow
        mDisp.show(mResult);
        //Jezeli ktorys klawisz wcisniety to rozpocznik gre od nowa
        if(mK1.get() || mK2.get())
        {
            mState = toIn;
        }
    }


    //Metoda wywolywana z funkcji glownej
    void game::step(void)
    {
        //Sprawdz stan
        switch(mState)
        {
            //Jezeli w prawo wywolaj metode obslugi poruszania sie w prawo
            case toOut:
                stepOut();
                break;
            //Jezeli w lewo wywolaj metode poruszania sie w lewo
            case toIn:
                stepIn();
                break;
           //Jezeli przgrales wywolaj metode wyswietlania wynikow
           case dispWin1:
           case dispWin2:
                stepResult();
                break;
        }
    }
    /*----------------------------------------------------------------------*/
    game MyGame;

    int main(void)
    {
        delay(1000000);
        setup_pll();
        while(1)
        {
           //Krok gry
            MyGame.step();
            //Opoznienie
            delay(3000000);
        }
        return 0;
    }

    gpio.cpp
    Code:

    /* Ksiazka STR912 - Klasa portu IO
     * Lucjan Bryndza (c) 2007 - Licence: GPL v3. */

    #include "gpio.h"

    //Konstruktor klasy konfigurujacy wybrany port w kierunku wejsca lub wyjscia
    gpioPort::gpioPort(ioPort port,uint8_t outp,uint8_t oc)
    {
        volatile uint32_t *ddr=0;   
        //W zaleznosci od wybranego portu wlacz okreslony sygnal zegarowy
        switch(port)
        {
            case Gpio0:
                SCU->PRR1 |= __GPIO0;
                SCU->PCGR1 |= __GPIO0;
                ddr = &GPIO0->DDR;
                ioDr = GPIO0->DR;
                break;
            case Gpio1:
                SCU->PRR1 |= __GPIO1;
                SCU->PCGR1 |= __GPIO1;
                ddr =& GPIO1->DDR;
                ioDr = GPIO1->DR;
                break;
            case Gpio2:
                SCU->PRR1 |= __GPIO2;
                SCU->PCGR1 |= __GPIO2;
                ddr = &GPIO2->DDR;
                ioDr = GPIO2->DR;
                break;
            case Gpio3:
                SCU->PRR1 |= __GPIO3;
                SCU->PCGR1 |= __GPIO3;
                ddr = &GPIO3->DDR;
                ioDr = GPIO3->DR;
                break;
            case Gpio4:
                SCU->PRR1 |= __GPIO4;
                SCU->PCGR1 |= __GPIO4;
                ddr = &GPIO4->DDR;
                ioDr = GPIO4->DR;
                break;
            case Gpio5:
                SCU->PRR1 |= __GPIO5;
                SCU->PCGR1 |= __GPIO5;
                ddr = &GPIO5->DDR;
                ioDr = GPIO5->DR;
                break;
            case Gpio6:
                SCU->PRR1 |= __GPIO6;
                SCU->PCGR1 |= __GPIO6;
                ddr = &GPIO6->DDR;
                ioDr = GPIO6->DR;
                break;
        case Gpio7:
                SCU->PRR1 |= __GPIO7;
                SCU->PCGR1 |= __GPIO7;
                ddr = &GPIO7->DDR;
                ioDr = GPIO7->DR;
                break;
            case Gpio8:
                SCU->PRR1 |= __GPIO8;
                SCU->PCGR1 |= __GPIO8;
                ddr = &GPIO8->DDR;
                ioDr = GPIO8->DR;
                break;
            case Gpio9:
                SCU->PRR1 |= __GPIO9;
                SCU->PCGR1 |= __GPIO9;
                ddr = &GPIO9->DDR;
                ioDr = GPIO9->DR;
                break;
        }
        //Typ interfejsu OC lub PushPull
        SCU->GPIOTYPE[port] = oc;
        //Konfiguracja
        uint16_t iocfg=0;
        //Ustawienie odpowiednich portow w kierunku ew/wy
        for(int i=0;i<8;i++)
            if(outp & (1<<i) ) iocfg |= 0x1<<(2*i);
        //Kierunek portu
        SCU->GPIOOUT[port] = iocfg;
        //Wejscie alternatywne wylaczone
        SCU->GPIOIN[port] = 0x0;
        //Konfiguruj data register (kierunek)
        *ddr = outp;
    }

    gpio.h
    Code:
    /* Ksiazka STR912 - Klasa portu IO
    
     * Lucjan Bryndza (c) 2007 - Licence: GPL v3. */

    #ifndef __GPIO_H__
    #define __GPIO_H__

    #include "91x_map.h"
    #include "91x_scu.h"
    #include <stdint.h>


    //Klasa obslugi portu GPIO
    class gpioPort
    {
        public:
            //Port number enum
            enum ioPort {Gpio0,Gpio1,Gpio2,Gpio3,Gpio4,Gpio5,Gpio6,Gpio7,Gpio8,Gpio9};
            //Konstruktor klasy
            gpioPort(ioPort port,uint8_t outp=0x0,uint8_t oc=0);
            //Odczyt i zapis zawartosci portu
            uint8_t readIo(uint8_t mask=0xff) { return ioDr[mask<<2]; }
            void writeIo(uint8_t data,uint8_t mask=0xff) { ioDr[mask<<2] = data; }
        private:
            volatile uint8_t *ioDr;
    };

    #endif


    Przy kompilacji tego wyskakuja bledy:
    Code:
    "C:/Program Files/yagarto-tools-20070303/bin/sh.exe": sed: command not found
    
    Compiling C++...
    arm-elf-c++ -c -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -g -DPDEBUG  game.cpp -o game.o
    In file included from ../str91xstdlib/inc/91x_map.h:28,
                     from game.cpp:20:
    ../str91xstdlib/inc/91x_type.h:40: error: redeclaration of C++ built-in type 'bool'
    make: *** [game.o] Error 1


    Troszkę pogrzebałem... wycinki plików nagłówkowych:
    91x_map.h
    Code:
    (...)
    
    include "91x_type.h"
    (...)

    91x_type.h
    Code:

    #ifndef __91x_type_H
    #define __91x_type_H

      typedef long long                u64;
      typedef unsigned long            u32;
      typedef unsigned short           u16;
      typedef unsigned char            u8;

      typedef signed long              s32;
      typedef signed short             s16;
      typedef signed char              s8;

      typedef volatile unsigned long   vu32;
      typedef volatile unsigned short  vu16;
      typedef volatile unsigned char   vu8;

      typedef volatile signed long     vs32;
      typedef volatile signed short    vs16;
      typedef volatile signed char     vs8;

    typedef enum { FALSE = 0, TRUE  = !FALSE } bool;
    typedef enum { RESET = 0, SET   = !RESET } FlagStatus, ITStatus;
    typedef enum { DISABLE = 0, ENABLE  = !DISABLE} FunctionalState;
    typedef enum { ERROR = 0, SUCCESS  = !ERROR} ErrorStatus;
    #endif /* __91x_type_H */

    Tego tutaj nie widac, ale Eclipse przy oznaczaniu kolorami pisowni elemty typu RESET, DISABLE, ERROR zrobil na niebiesko, a FALSE na czarno.
    Po zahashowaniu tej linii
    Code:

    typedef enum { FALSE = 0, TRUE  = !FALSE } bool;

    juz w/w blad nie wyskakuje natomiast pojawiaja sie:
    Code:

    arm-elf-c++ -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -g -DPDEBUG  game.o gpio.o crt0_str912.o -o game.elf -nostartfiles -T../scripts/str912-rom.ld -Wl,-Map=game.map,--cref -g -DPDEBUG
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/lib\libstdc++.a(del_op.o) uses FPA instructions, whereas game.elf does not
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: failed to merge target specific data of file c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/lib\libstdc++.a(del_op.o)
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/lib\libstdc++.a(pure.o) uses FPA instructions, whereas game.elf does not

    (dużo podobnych komunikatów jak wyższe)

    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: failed to merge target specific data of file c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_dvmd_tls.o)
    collect2: ld returned 1 exit status
    make: *** [game.elf] Error 1


    Dziwnie 'linuksowo' wygladaja te sciezki "lib/gcc" jak i sam znak slash.

    Z gory dzieki za pomoc

    edit: Widze ze mam podobny problem jak kolega z linku: https://www.elektroda.pl/rtvforum/topic1262045.html
    jednak prawde mowiac z tamtego posta nie wiem jak wyciagnac panaceum na moje bolaczki.
  • Specjalista - Mikrokontrolery
    ksymis napisał:
    Ale ich jest cała masa :( Skąd wiadomo gdzie i skąd kupić - tak, żeby był dobry ;] i tani ;]

    Trzeba czytać forum: https://www.elektroda.pl/rtvforum/topic1191756.html <:

    Cytat:
    Dziwnie 'linuksowo' wygladaja te sciezki "lib/gcc" jak i sam znak slash.

    Scieżkami się nie przejmuj.

    Linker dołącza do twojego kodu biblioteki, które w teorii nie pasują do wybranej przez Ciebie architektury. Nie używałem nigdy gcc do C++, więc nie jestem w stanie Ci w tej kwestii pomóc. Poszukaj tego komunikatu błędu w google, to coś na pewno znajdziesz, bo wiem, że gdzieś taki błąd już widziałem.

    4\/3!!
  • Użytkownik usunął konto  
  • Specjalista - Mikrokontrolery
    ksymis napisał:
    A czego? G++? Moze to w tym rzecz? gcc nie wolno do c++?

    Nie o to chodzi (; Po prostu nigdy nie pisałem nic w C++ w GCC (czyli Gnu Compiler Collection - nie chodzi mi o sam plik gcc.exe). Dlatego też w tej kwestii już Ci nic nie pomogę.

    Cytat:

    Tam są definitywnie inne błędy (;

    4\/3!!
  • Poziom 10  
    albertb napisał:
    Spróbuj dodać parametr -msoft-float do CFLAGS i CXXFLAGS.

    Efekt ten sam:
    Code:

    Linking...
    arm-elf-c++ -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -msoft-float -g -DPDEBUG  game.o gpio.o crt0_str912.o -o game.elf -nostartfiles -T../scripts/str912-rom.ld -Wl,-Map=game.map,--cref -g -DPDEBUG
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/lib\libstdc++.a(del_op.o) uses FPA instructions, whereas game.elf does not
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/lib\libstdc++.a(del_op.o) uses hardware FP, whereas game.elf uses software FP

    (...)

    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_dvmd_tls.o) uses FPA instructions, whereas game.elf does not
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_dvmd_tls.o) uses hardware FP, whereas game.elf uses software FP
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: failed to merge target specific data of file c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_dvmd_tls.o)
    collect2: ld returned 1 exit status
    make: *** [game.elf] Error 1
    rm gpio.o crt0_str912.o game.o


    Freddie Chopin napisał:

    Dlatego też w tej kwestii już Ci nic nie pomogę.

    A szkoda :) Bo jak do tej pory twoja pomoc przepchnęła mnie przez tematy przez które sam bym walczył tygodniami

    Jeszcze jakieś pomysły?
    Pozdrawiam i dzięki z góry.
  • Specjalista - Mikrokontrolery
  • Użytkownik usunął konto  
  • Specjalista - Mikrokontrolery
    http://www.codesourcery.com/sgpp/lite/arm/portal/release642

    schemat postępowania dokładnie taki sam jak dla yagarto, tyle tylko że podstawiasz inne pliki w stosownych miejscach. No i zmiana w makefile z arm-elf-... na arm-none-eabi-...

    Jeśli chcesz debuggować, to korzystaj jednak z gdb pochodzącego z yagarto, bo ten z CS jest lekko skrzaczony w najnowszych dwoch wersjach (q3).

    4\/3!!
  • Poziom 10  
    Freddie Chopin napisał:
    istnieje niewielka szansa, że yagarto nieobsługuje twojego rdzenia. Z tego względu polecam codesourcery, które obsługuje na pewno wszystko (;

    Ale czy w tej sytuacji 2 poprzednie programy (listingi pozniej) też nie powinny się NIE kompilować? A kompilują się i pinknie działają:

    sysclock.c
    Code:
    #include "91x_map.h"
    
    #include "91x_scu.h"
    #include "91x_fmi.h"
    /*----------------------------------------------------------------------*/
    void delay(int n)
    {
        while(n--)
       asm volatile ("nop");
    }
    /*----------------------------------------------------------------------*/
    #define PLL_N 192
    #define PLL_M 25
    #define PLL_P 2
    #define SCU_PLLEN 0x80000

    static void  setup_pll(void)
    {
        //Jezeli petla jest zsynchronizowana tzn ze jest ok
        if(SCU->SYSSTATUS & SCU_FLAG_LOCK) return;
        //Konfiguracja uruchomienie i synchronizacja PLL
        SCU->PLLCONF = (PLL_P<<16) | (PLL_N<<8) | PLL_M;
        SCU->PLLCONF |= SCU_PLLEN;
        while(~SCU->SYSSTATUS & SCU_FLAG_LOCK);

        //Ustawiamy pamiec flash na dwa cykle oczekiwania (dla 96MHz)
        FMI->CR |= FMI_WRITE_WAIT_STATE_1;
        *(vu16*)FMI_BANK_1 = 0x60;
        *(vu16*)(FMI_BANK_1|FMI_READ_WAIT_STATE_2|FMI_LVD_ENABLE|FMI_PWD_ENABLE|FMI_FREQ_HIGH) = 0x03;

        //Ustawiamy F clk na koncu bedzie z PLL-a
        SCU->CLKCNTR = SCU_EMIBCLK_Div2 | SCU_USBCLK_MCLK2 | SCU_PCLK_Div2;
    }
    /*----------------------------------------------------------------------*/
    static void setup_gpio(void)
    {
        // Wylacz sygnal zerowania dla portu 7
        SCU->PRR1 |= __GPIO7;

        //Wlacz sygnal zegarowy dla portu 7
        SCU->PCGR1 |= __GPIO7;

        //Wszystkie wyjscia portu 7 jako push pull
        SCU->GPIOTYPE[7] = 0x0000;

        //Wszystkie wyjscia portu 7 w trybie GPIO
        SCU->GPIOOUT[7]  = 0x5555;

        //Caly port jako wyjsciowy
        GPIO7->DDR = 0xff;
    }
    /*----------------------------------------------------------------------*/
    //Funkcja glowna main
    int main(void)
    {
        //Poczatkowe opoznienie (JTAG CACHE)
    //   delay(1000000);

        //Ustawienie portow gpio
        setup_gpio();

        // petla nieskocznona
        int loop_cnt = 0;
        while(1)
        {
       int i;
       for(i=0;i<8;i++)
       {
                // turn LEDs on/off
           GPIO7->DR[0xff<<2]=(1<<i);
                // wait a while
           delay(1000000);
            }
            if(loop_cnt<10)
            {
                 loop_cnt++;
            }
            else if(loop_cnt==10)
            {
                //Za dziesiatym razem przyspiesz do 96MHz
                loop_cnt++;
                setup_pll();
            }
        }
        return 0;
    }

    gpio.c
    Code:

    #include "91x_map.h"
    #include "91x_scu.h"
    #include "91x_fmi.h"
    /*----------------------------------------------------------------------*/
    static void delay(int n)
    {
        while(n--)
       asm volatile ("nop");
    }
    /*----------------------------------------------------------------------*/
    #define PLL_N 192
    #define PLL_M 25
    #define PLL_P 2
    #define SCU_PLLEN 0x80000

    static void setup_pll(void)
    {
        //Jezeli petla jest zsynchronizowana tzn ze jest ok
        if(SCU->SYSSTATUS & SCU_FLAG_LOCK) return;
        //Konfiguracja uruchomienie i synchronizacja PLL
        SCU->PLLCONF = (PLL_P<<16) | (PLL_N<<8) | PLL_M;
        SCU->PLLCONF |= SCU_PLLEN;
        while(~SCU->SYSSTATUS & SCU_FLAG_LOCK);

        //Ustawiamy pamiec flash na dwa cykle oczekiwania (dla 96MHz)
        FMI->CR |= FMI_WRITE_WAIT_STATE_1;
        *(vu16*)FMI_BANK_1 = 0x60;
        *(vu16*)(FMI_BANK_1|FMI_READ_WAIT_STATE_2|FMI_LVD_ENABLE|FMI_PWD_ENABLE|FMI_FREQ_HIGH) = 0x03;

        //Ustawiamy F clk na koncu bedzie z PLL-a
        SCU->CLKCNTR = SCU_EMIBCLK_Div2 | SCU_USBCLK_MCLK2 | SCU_PCLK_Div2;
    }
    /*----------------------------------------------------------------------*/
    static void setup_gpio(void)
    {
        // Wylacz sygnal zerowania dla portu 7 i 3
        SCU->PRR1 |= __GPIO7 | __GPIO3 ;

        //Wlacz sygnal zegarowy dla portu 7 i 3
        SCU->PCGR1 |= __GPIO7 | __GPIO3;

        //Wszystkie wyjscia portu 7 jako push pull
        SCU->GPIOTYPE[7] = 0x0000;

        //Wszystkie wyjscia portu 7 w trybie GPIO
        SCU->GPIOOUT[7]  = 0x5555;

        //Caly port 7 jako wyjsciowy
        GPIO7->DDR = 0xff;


        //Caly port 3 jako wejscie
        SCU->GPIOIN[3] = 0x00;

        //Port 3 jako wejsciowy
        GPIO3->DDR = 0;
    }
    /*----------------------------------------------------------------------*/
    int main(void)
    {
        //Poczatkowe opoznienie (JTAG CACHE)
      delay(1000000);

        //Ustawienie portow gpio
        setup_pll();

        //Ustawienie petli PLL (czestotliwosc 96MHz)
        setup_gpio();

        // petla nieskocznona
        while(1)
        {
           int i;
           for(i=0;i<4;i++)
           {
               // Zalacz wylacz ledy
          GPIO7->DR[0x0f<<2]=(1<<i);
               //Przepisz dane klawiszy na ledy
          GPIO7->DR[0xf0<<2] = ~GPIO3->DR[0xf0<<2];
          // wait a while
          delay(1000000);
               }
        }
        return 0;
    }


    albertb napisał:

    Sprawdź w swoim komputerze, ile masz plików libstdc++.a (lub libgcc.a) i w jakich katalogach.


    libstdc++.a
    Code:
    C:\Program Files\yagarto\arm-elf\lib
    
    C:\Program Files\yagarto\arm-elf\lib\be
    C:\Program Files\yagarto\arm-elf\lib\fpu
    C:\Program Files\yagarto\arm-elf\lib\interwork
    C:\Program Files\yagarto\arm-elf\lib\nofmult
    C:\Program Files\yagarto\arm-elf\lib\thumb
    C:\Program Files\yagarto\arm-elf\lib\be\fpu
    C:\Program Files\yagarto\arm-elf\lib\be\interwork
    C:\Program Files\yagarto\arm-elf\lib\be\nofmult
    C:\Program Files\yagarto\arm-elf\lib\fpu\interwork
    C:\Program Files\yagarto\arm-elf\lib\fpu\nofmult
    C:\Program Files\yagarto\arm-elf\lib\thumb\interwork
    C:\Program Files\yagarto\arm-elf\lib\thumb\interwork
    C:\Program Files\yagarto\arm-elf\lib\be\fpu\interwork
    C:\Program Files\yagarto\arm-elf\lib\be\fpu\nofmult
    C:\Program Files\yagarto\arm-elf\lib\thumb\be\interwork


    libgcc.a

    Code:

    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\be
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\fpu
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\interwork
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\nofmult
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\thumb
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\be\fpu
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\be\interwork
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\be\nofmult
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\fpu\interwork
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\fpu\nofmult
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\thumb\be
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\thumb\interwork
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\be\fpu\interwork
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\be\fpu\nofmult
    C:\Program Files\yagarto\lib\gcc\arm-elf\4.3.3\thumb\be\interwork


    albertb napisał:

    Opcja -mfpu=fpa powinna wyeliminować błędy,
    ale tego nie zrobiła niestety :(

    albertb napisał:

    Pozostaje więc zmiana toolchaina.

    Ehh mam nadzieje, że to ostateczność bo to ile męczyłem się z openocd+yagarto+eclipse to jakas masakra. A jeśli będzie trzeba zmienić to mam nadzieję, że nabyte doświadczenie chociaż troszke pomoże.

    Freddie Chopin napisał:
    schemat postępowania dokładnie taki sam jak dla yagarto, tyle tylko że podstawiasz inne pliki w stosownych miejscach. No i zmiana w makefile z arm-elf-... na arm-none-eabi-...

    Jeśli chcesz debuggować, to korzystaj jednak z gdb pochodzącego z yagarto, bo ten z CS jest lekko skrzaczony w najnowszych dwoch wersjach (q3).

    Czyli:
    Instaluje codesourcery, podmieniam pathy (usuwam z nich yagarto), kopiuje arm-elf-gdb do katalogu gdzie bedzie arm-none-gdb i odpowiednio ustawiam w makefile?

    Dzięki za support - pozdrawiam.
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 10  
    albertb napisał:
    Daj jeszcze wynik arm-elf-gcc -print-multi-lib.

    Code:

    .;
    thumb;@mthumb
    be;@mbig-endian
    fpu;@mhard-float
    interwork;@mthumb-interwork
    nofmult;@mcpu=arm7
    fpu/interwork;@mhard-float@mthumb-interwork
    fpu/nofmult;@mhard-float@mcpu=arm7
    be/fpu;@mbig-endian@mhard-float
    be/interwork;@mbig-endian@mthumb-interwork
    be/nofmult;@mbig-endian@mcpu=arm7
    be/fpu/interwork;@mbig-endian@mhard-float@mthumb-interwork
    be/fpu/nofmult;@mbig-endian@mhard-float@mcpu=arm7
    thumb/be;@mthumb@mbig-endian
    thumb/interwork;@mthumb@mthumb-interwork
    thumb/be/interwork;@mthumb@mbig-endian@mthumb-interwork


    albertb napisał:
    Oraz komunikaty błędu (po jednym wystarczy) dla:
    1. -mfpu=fpa -msoft-float do CLFAGS, CXXFLAGS, i ASFLAGS
    2. -mfpu=fpa -mhard-float do jw.


    Ad 1.
    Code:

    #Pozostale ustawienia kompilatora

    ASFLAGS += -Wa,-mapcs-32 -mcpu=$(MCU) -mfpu=fpa -msoft-float
    LDFLAGS +=  -nostartfiles -T$(LSCRIPT) -Wl,-Map=$(TARGET).map,--cref
    CFLAGS  += -O$(OPT) -mcpu=$(MCU) -mfpu=fpa -msoft-float
    CXXFLAGS += -O$(OPT) -mcpu=$(MCU) -mfpu=fpa -msoft-float
    CPFLAGS =  -S

    Code:
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: failed to merge target specific data of file c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/lib\libg.a(lib_a-readr.o)
    
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_udivsi3.o) uses hardware FP, whereas game.elf uses software FP
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: failed to merge target specific data of file c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_udivsi3.o)
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: ERROR: c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_dvmd_tls.o) uses hardware FP, whereas game.elf uses software FP
    c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3/../../../../arm-elf/bin/ld.exe: failed to merge target specific data of file c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.3\libgcc.a(_dvmd_tls.o)
    collect2: ld returned 1 exit status
    make: *** [game.elf] Error 1
    rm gpio.o crt0_str912.o game.o

    Ad.2.
    Code:

    #Pozostale ustawienia kompilatora

    ASFLAGS += -Wa,-mapcs-32 -mcpu=$(MCU) -mfpu=fpa -mhard-float
    LDFLAGS +=  -nostartfiles -T$(LSCRIPT) -Wl,-Map=$(TARGET).map,--cref
    CFLAGS  += -O$(OPT) -mcpu=$(MCU) -mfpu=fpa -mhard-float
    CXXFLAGS += -O$(OPT) -mcpu=$(MCU) -mfpu=fpa -mhard-float
    CPFLAGS =  -S

    Code:
    V:\workspacecpp\gra>make
    
    arm-elf-gcc -M -Wa,-mapcs-32 -mcpu=arm966e-s -mfpu=fpa -mhard-float -gstabs -DPD
    EBUG crt0_str912.S > crt0_str912.dep.$$; \
            sed 's,\(crt0_str912\)\.o[ :]*,\1.o crt0_str912.dep : ,g' < crt0_str912.
    dep.$$ > crt0_str912.dep; \
            rm -f crt0_str912.dep.$$
    "C:/Program Files/yagarto-tools-20070303/bin/sh.exe": sed: command not found
    arm-elf-c++ -M -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -mfpu=fpa -mhar
    d-float -g -DPDEBUG gpio.cpp > gpio.dep.$$; \
            sed 's,\(gpio\)\.o[ :]*,\1.o gpio.dep : ,g' < gpio.dep.$$ > gpio.dep; \
            rm -f gpio.dep.$$
    "C:/Program Files/yagarto-tools-20070303/bin/sh.exe": sed: command not found
    arm-elf-c++ -M -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -mfpu=fpa -mhar
    d-float -g -DPDEBUG game.cpp > game.dep.$$; \
            sed 's,\(game\)\.o[ :]*,\1.o game.dep : ,g' < game.dep.$$ > game.dep; \
            rm -f game.dep.$$
    "C:/Program Files/yagarto-tools-20070303/bin/sh.exe": sed: command not found
    Compiling C++...
    arm-elf-c++ -c -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -mfpu=fpa -mhar
    d-float -g -DPDEBUG  game.cpp -o game.o
    Compiling C++...
    arm-elf-c++ -c -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -mfpu=fpa -mhar
    d-float -g -DPDEBUG  gpio.cpp -o gpio.o
    Assembling...
    arm-elf-gcc -c -Wa,-mapcs-32 -mcpu=arm966e-s -mfpu=fpa -mhard-float -gstabs -DPD
    EBUG  crt0_str912.S -o crt0_str912.o
    Linking...
    arm-elf-c++ -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -mfpu=fpa -mhard-f
    loat -g -DPDEBUG  game.o gpio.o crt0_str912.o -o game.elf -nostartfiles -T../scr
    ipts/str912-rom.ld -Wl,-Map=game.map,--cref -g -DPDEBUG
    Converting to bin...
    arm-elf-objcopy -O binary -S game.elf game.bin
    rm gpio.o crt0_str912.o game.o


    Jak widać się skompilowało. Wgrałem bina - działa. Więc teraz tak:
    1. Dziękuję serdecznie za pomoc
    2. Co w temacie tego błędu z BOOL'em co pisałem w poprzednim poście? Czy czasem nie powinno być tak, że nie powinienem zakomentowywać niczego w plikach dostarczonych przez ST? (str91x_type.h)
    3. Dlaczego teraz zadziałało? Co oznaczają te opcje?
    4. Dlaczego poprzednie programy się kompilowały bez błędów?
    5. Czy teraz wszystkie programy mogę dla bezpieczeństwa kompilować -mfpu=fpa -mhard-float czy używać w zależności od występowania błędu?
    6. Ciężko u was znaleść stok ZADZIAŁ :) Półtorego godziny straciłem na to w NT :D
  • Użytkownik usunął konto  
  • Poziom 10  
    Inny toolchain - polecony przez Freddiego:

    Code:
    V:\workspacecpp\gra>make
    
    arm-none-eabi-gcc -M -Wa,-mapcs-32 -mcpu=arm966e-s -gstabs -DPDEBUG crt0_str912.
    S > crt0_str912.dep.$$; \
            sed 's,\(crt0_str912\)\.o[ :]*,\1.o crt0_str912.dep : ,g' < crt0_str912.
    dep.$$ > crt0_str912.dep; \
            rm -f crt0_str912.dep.$$
    "C:/Program Files/yagarto-tools-20070303/bin/sh.exe": sed: command not found
    arm-none-eabi-c++ -M -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -g -DPDEB
    UG gpio.cpp > gpio.dep.$$; \
            sed 's,\(gpio\)\.o[ :]*,\1.o gpio.dep : ,g' < gpio.dep.$$ > gpio.dep; \
            rm -f gpio.dep.$$
    "C:/Program Files/yagarto-tools-20070303/bin/sh.exe": sed: command not found
    arm-none-eabi-c++ -M -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -g -DPDEB
    UG game.cpp > game.dep.$$; \
            sed 's,\(game\)\.o[ :]*,\1.o game.dep : ,g' < game.dep.$$ > game.dep; \
            rm -f game.dep.$$
    "C:/Program Files/yagarto-tools-20070303/bin/sh.exe": sed: command not found
    Compiling C++...
    arm-none-eabi-c++ -c -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -g -DPDEB
    UG  game.cpp -o game.o
    Compiling C++...
    arm-none-eabi-c++ -c -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -g -DPDEB
    UG  gpio.cpp -o gpio.o
    Assembling...
    arm-none-eabi-gcc -c -Wa,-mapcs-32 -mcpu=arm966e-s -gstabs -DPDEBUG  crt0_str912
    .S -o crt0_str912.o
    Linking...
    arm-none-eabi-c++ -Wall  -I../str91xstdlib/inc/ -O0 -mcpu=arm966e-s -g -DPDEBUG
     game.o gpio.o crt0_str912.o -o game.elf -nostartfiles -T../scripts/str912-rom.l
    d -Wl,-Map=game.map,--cref -g -DPDEBUG
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2\libgcc.a(unwind-arm.o):
    In function `get_eit_entry':
    unwind-arm.c:(.text+0x748): undefined reference to `__exidx_start'
    unwind-arm.c:(.text+0x74c): undefined reference to `__exidx_end'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-abort.o): In function `abort':
    abort.c:(.text+0xc): undefined reference to `_exit'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
    sbrkr.c:(.text+0x18): undefined reference to `_sbrk'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-signalr.o): In function `_getpid_r':
    signalr.c:(.text+0x4): undefined reference to `_getpid'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-signalr.o): In function `_kill_r':
    signalr.c:(.text+0x2c): undefined reference to `_kill'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-writer.o): In function `_write_r':
    writer.c:(.text+0x20): undefined reference to `_write'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-closer.o): In function `_close_r':
    closer.c:(.text+0x18): undefined reference to `_close'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-fstatr.o): In function `_fstat_r':
    fstatr.c:(.text+0x1c): undefined reference to `_fstat'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-isattyr.o): In function `_isatty_r':
    isattyr.c:(.text+0x18): undefined reference to `_isatty'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-lseekr.o): In function `_lseek_r':
    lseekr.c:(.text+0x20): undefined reference to `_lseek'
    v:/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib\libc.a(lib_a-readr.o): In function `_read_r':
    readr.c:(.text+0x20): undefined reference to `_read'
    collect2: ld returned 1 exit status
    make: *** [game.elf] Error 1
    rm gpio.o crt0_str912.o game.o


    Mniej błędów niż wcześniej, ale jakby podobne.

    edit: Czy mozna jakos dorobić "sed" nie instalując cygwina? Bo widać, że tego seda też mu brakuje