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

[STM32][Openocd]Dziwne zachowanie openocd

29 Paź 2009 23:23 3119 8
  • Poziom 13  
    Witajcie,
    Pracuję na STM32 CL i do końca nie rozumiem zachowania się openocd. Plik mam poprawnie skompilowany (z przkładów freddiego ). W eclipsie sekcje GDB_Hardware Debugging mam ustawiona następująco:

    Code:

    main->C/C++ Application: {wkazanie pliku: stm32_blink_led.elf}
    Debugger -> GDB command -> arm-none-eabi-gdb.exe
    Debugger -> portnumber = 3333
    Sturtup->initialization Options :
         monitor reset
         monitor soft_reset_halt
         load
         continue
    inne opcje pozostawiłem bez zmian

    jak sobie przeglądnę co mi wywala openocd to dostaję komunikat:
    Code:

    target halted due to debug-request, current mode: Handler HardFault
    xPSR: 0x00000003 pc: 0xbf3e429a
    requesting target halt and executing a soft reset
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0x01000000 pc: 0x490e8808
    Warn : not enough working area available(requested 16384, free 16336)

    Martwi mnie to i nie wiem co zrobić, żeby tego się pozbyć. BTW program się wgrywa i działa tak jak powinien.
    Jeżeli ktoś myśli, że mam za duży ten plik to:
    Code:
    Size of target .elf file:
    
    arm-none-eabi-size -B stm32_blink_led.elf
       text      data       bss       dec       hex   filename
       1052         0      2052      3104       c20   stm32_blink_led.elf
  • Specjalista - Mikrokontrolery
    W przykładach przecież były gotowe skróty do GDB i w nich nie było używane ani soft_reset_halt (bo dla stm32 jest zbędne), ani continue (bo można poniżej zaptaszkować "Resume", zaraz obok okienka z ustawianiem breakpointa na main() ).

    Tego warninga się nie pozbędziesz. Zignoruj. OpenOCD i GDB sypią errorami i warningami na okrągło, to normalne <:

    4\/3!!
  • Poziom 13  
    Coś tak przypuszczałem.

    Mógłbyś mi jeszcze powiedzieć dlaczego mi program nie zostaje w stm-ie po zaniku zasilania ?
    piny odpowiedzialne za uruchamianie są tak ustawione żeby bootwał się z flasha.
    Program zaczyna się od adresu 0x08000000 i zapewne dlatego tak jest.
    Jednak zmiana tego adresu na wartość 0x0 nie przyniosła spodziewanego efektu :)

    --
    flash się zaczyna od 0x08000000
    więc co może być nie tak ?
    btw jak pominę komendę load to nie mogę ponownie włączyć programu/ wejść do debuggera
  • Specjalista - Mikrokontrolery
    Nie mogę Ci odpowiedzieć, bo wg mnie program zostaje we flashu, a problem masz gdzie indziej. Problemem mogą być zmiany na ślepo które wykonujesz bez zastanowienia, takie jak zmiana początku pamięci Flash.

    A tak BTW to jak masz JTAGa podłączonego do układu "po zaniku zasilania" to w 99% przypadków JTAG będzie trzymał układ w resecie.

    4\/3!!
  • Poziom 13  
    Problem ten pojawił się już wcześniej, przed moimi kombinacjami.
    Płytka na której pracuję to STM32Butterfly. Poniżej zamieszczam podłączenie jtaga olimex-tiny. Po wyjęciu jataga z układu procek nie wstaje;/

    [STM32][Openocd]Dziwne zachowanie openocd
  • Specjalista - Mikrokontrolery
    Odczytaj pamięć układu za pomocą OpenOCD to będziesz wiedział czy jest tam program czy go nie ma. Jak masz ustawione BOOT0 i BOOT1?

    4\/3!!
  • Poziom 13  
    Też tak pomyślałem, ale wczoraj było już późno i już miałem dość :)Jak wrócę na mieszkanie (niedziela) to się tym zajmę i zdam relacje.

    BOOT0 mam na 0
    BOOT1 mam na 0 ( nie ma znaczenia gdy BOOT0 jest 0 )

    czyli mam dobrze ustawione.
  • Poziom 13  
    Witajcie,
    Sprawdziłem pamięć i jest coś w niej zapisane od adresu 0x08000000. Piny BOOT0 oraz BOOT1 mam ustawione na stan niski. Tak jak pisałem wcześniej jak wgram program, komendy:
    Code:
    monitor reset
    
    monitor soft_reset_halt
    load

    To wszystko jest ok. W chwili gdy pomijam komendę load lub odłączam zasilanie od procesora to mi program nie uruchamia się. Licznik PC ma wartość 0xbf3e429b.
    Jeżeli zatrzymam program i dam np. step over to otrzymuje errora: "Target request failed: Cannot find bounds of current function". Pod tym adresem są same zera.

    Ktoś coś wie co może być nie tak ? Pod adresem 0 znajdują się te same wartości jak po adresem 0x08000000.

    Dodano po 30 [minuty]:

    No i sprawa się wyjaśniła. Nie podłączałem pliku z wektorami przerwań :)
  • Pomocny post
    Specjalista - Mikrokontrolery
    Proponowałbym NIE używać komendy soft_reset_halt, gdy nie jest to konieczne (na STM32 nie jest to konieczne), bo czasem wynikają z niej naprawdę DZIWNE problemy.

    4\/3!!