Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Błędy przy linkowaniu CStartup.s oraz konfiguracja Segger J-link+OpenOCD

szary_pl 20 Nov 2011 23:27 2373 10
Computer Controls
  • #1
    szary_pl
    Level 10  
    Witam,

    mam problem z implementacją projektu z załącznika (docelowo WinArm/miganie dioda) na CrossWorksie i mikrokontrolerze AT91SAM7X256(konkretnie SAM7-EX256 olimex.dev).

    Przy linkowaniu dostaje blad :
    Building “faty_z_ksiazki” in configuration “ARM Flash Debug” — 4 errors
      Assembling Cstartup.S
      Linking faty_z_ksiazki.elf — 4 errors
        ARM Flash Debug/Cstartup.o: In function `AT91F_Spurious_handler':
        C:/CrossWorks Projects/faty_z_ksiazki/Cstartup.S:293: undefined reference to `_etext'
        C:/CrossWorks Projects/faty_z_ksiazki/Cstartup.S:293: undefined reference to `_data'
        C:/CrossWorks Projects/faty_z_ksiazki/Cstartup.S:293: undefined reference to `_edata'
    Build failed


    Wydaje mi się, że błąd spowodowany jest tym że do projektu dołączam Cstartup.S, który jest już dołączony automatycznie przez CrossWorks.
    Niestety bez niego(korzystajac jedynie z CrossWorksowego) Cstartup_Sam7.c nie widzi definicji do obslugi przerwa Fiq i IrQ. Starałem się je przemycic do startupa crossworksa ale niestety funckcje te generuja bledy skladni.



    Probowalem tez podejsc do problemu z drugiej strony, instalujac WinARM jednak nie jestem sobie w stanie poradzić z konfiguracją mojego programatora Segger J-link w OpenOCD.

    Więc prosiłbym o pomoc albo w przypadku pierwszym albo drugim. Proszę o konkretne odpowiedzi(np porady skonfigurowania plikow OpenOCD). Poświęciłem już sporo czasu aby rozwiązać ten problem, niestety mam jeszcze małą wiedzę zarówno na temat programowania jak i samych mikrokontrolerow, dlatego zwracam się o pomoc.

    Pozdrawiam

    Ps:dolaczam AT91_SAM7Cstartup z crossworksa

    Code: c
    Log in, to see the code
  • Computer Controls
  • Helpful post
    #2
    Freddie Chopin
    MCUs specialist
    1. WinARM to staroć nierozwijany od lat - użyj CodeSourcery.
    2. Twój pierwszy problem wynika z tego, że odpowiednie definicje początku/końca różnych sekcji nie są obecne/nazywają się inaczej w skrypcie linkera.
    3. Do J-Linka instalujesz inne sterowniki (libusb-win32) i podłączasz normalnie do kompa, uruchamiając normalnie OpenOCD - nie ma tu żadnych sztuczek (poza sterownikami).

    https://www.elektroda.pl/rtvforum/topic1313509.html
    https://www.elektroda.pl/rtvforum/topic1339518-0.html (możesz dostosować dla siebie przykład dla LPC2103)

    4\/3!!
  • Computer Controls
  • #3
    szary_pl
    Level 10  
    Witam ponownie,

    rzeczywiscie po zainstalowaniu wspomnianych wyzej sterownikow i wpisaniu komendy

    openocd -f interface/jlink.cfg -f target/sam7x256.cfg


    lacze sie z plytka i tu rodzi sie pytanie, poniewaz w manualu nie ma nigdzie jasno podanej sekwecji komend do wgrania programu do flasha(w crossworks jedno klikniecie).

    Znalazlem na forum:
    reset halt
    flash write_image erase nazwa_pliku_twojego_Hexa.hex 0
    reset run
    shutdown 


    polaczylem sie przez telnet i niby wgrywam plik

    reset halt
    JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    srst pulls trst - can not reset into halted mode. Issuing halt after reset.
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x700000d3 pc: 0x00000000
    NOTE! DCC downloads have not been enabled, defaulting to slow memory writes. Type 'help dcc'.
    NOTE! Severe performance degradation without fast memory access enabled. Type 'help fast'.
    > flash write_image erase inzynierka.elf 0
    auto erase enabled
    Padding image section 0 with 0 bytes
    Padding image section 1 with 0 bytes
    wrote 49152 bytes from file inzynierka.elf in 39.594265s (1.212 kb/s)
    > reset run
    JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x700000d3 pc: 0x0001feac
    NOTE! DCC downloads have not been enabled, defaulting to slow memory writes. Type 'help dcc'.
    NOTE! Severe performance degradation without fast memory access enabled. Type 'help fast'.


    Co dalej czynić mości panowie? z CrossWorksa smigalo? Sam plik elf to moze za malo?

    Ps: Zalaczam scrina z laczenia.

    Błędy przy linkowaniu CStartup.s oraz konfiguracja Segger J-link+OpenOCD
  • #5
    szary_pl
    Level 10  
    To jest plik compilowany i linkowany sprawdzany na crossworksie.

    Czyli teoretycznie wszystko robie dobrze?
  • #6
    Freddie Chopin
    MCUs specialist
    Jak na moje oko robisz wszystko dobrze, choć nie znam tych układów i może być tam "coś" co trzeba zrobić żeby zadziałało prawidłowo. Upewnij się, że flash nie jest jakoś zabezpieczony przez zapisem (jest do tego komenda w OpenOCD). Spróbuj też wrzucić ten sam plik jakoś inaczej żeby wykluczyć problemy z kodem, chyba że ten plik już kiedyś odpalałeś i było OK.

    4\/3!!
  • #7
    szary_pl
    Level 10  
    Tak jak pisalem wrzucalem kod przez crossworks wczesniej.

    Dla pewnosci zapytam:po komendzie
    reset run
    program powinien zaczac dzialanie?
  • #8
    Freddie Chopin
    MCUs specialist
    Tak - jest to po prostu reset układu.

    Mam pewien pomysł - poexperymentuj z ustawieniami resetu, szczególnie spróbuj na samym początku wydać komendę: "reset_config trst_and_srst separate" oraz "jtag_khz X" (X - prędkość z kHz, przynajmniej 8x mniejsza niż prędkość rdzenia PO RESECIE!).

    Możesz też spróbować zupdate'ować firmware do JLinka, ponoć najlepiej z OpenOCD działą wersja 7.

    4\/3!!
  • #9
    szary_pl
    Level 10  
    To chyba jest cos banalnego na czym ja sie nie znam.

    Probowałem komend ktore mi podales, cos sam jeszcze pogrzebałem- brak rezultatów.

    Spróbowalem więc wrócic do crossworksa. Zabralem sie do przeinstalowania sterownika usb, a raczej odinstalowania libusb-win32, zebym mogl znow laczyc sie za pomoca crossworks. Sterownik wgral sie spowrotem wiec usunalem tez plik.

    Po czym po podlaczeniu jlinka i pradu do plytki odpalil sie program na nia wrzucony.

    Dodam jeszcze ze crossworks wrzucal program do ramu(po odcieciu zasialnia program znikal), a teraz program siedzi we flashu.

    Masz/macie pojęcie o czym to jest spowodowane?

    PS: Początki sa doprawdy frustrujące.
  • #10
    Freddie Chopin
    MCUs specialist
    Nie da się wrzucić tego samego programu raz do flasha raz do RAMu - on musi być do tych dwóch przypadków zupełnie inaczej skompilowany.

    Zacznij po prostu "od zera" - od bardzo prostego programiku który by nie robił nic (np. w main w kółko powiększaj jakąś zmienną volatile) - ustaw sobie sesję debuggowania w Eclipse/GDB, wrzuć go przez OpenOCD, przeklikaj parę razy i stopniowo rozbudowywuj. Generalnie mi się wydaje, że to co próbowałeś wrzucać wcale nie było programem nadającym się do flasha.

    4\/3!!
  • #11
    szary_pl
    Level 10  
    Wydaje mi sie ze jeden z tych plikow rzeczywiscie do flasha sie nie nadawal.

    Udalo mi sie jakims cudem wrzucic prosty programik migajacy dioda led, ale to jest jakas paranoja bo kiedy probuje przerobic go zeby po prostu wlaczyc diode an stale ona ciagle mruga.

    Cudownie byloby sobie zfleshowac mozg z cala wiedza na temat mikroklockow, tylko trzeba odpowiednia wtyczke;p

    Dzieki za dotychczas poswiecony czas Freddie. Powalcze z tym jeszcze zawsze to byl jakis efekt.