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

[OpenOCD][STM32]Debugowanie address + size wrapped

kozak_sc 07 Lut 2012 21:19 2586 7
  • #1 07 Lut 2012 21:19
    kozak_sc
    Poziom 23  

    Cześć
    Mam projekcik na STM32, debuguje przy użyciu OpenOCD. Wszystko działa bez zarzutów do momentu wkompilowania w kod takiej oto funkcji znalezionej gdzieś w necie :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod wydaje się być poprawny, zresztą nie ma to znaczenia bo przy próbie debugowania dostaję :
    Code:
    Info : accepting 'gdb' connection from 3333
    
    Info : device id = 0x10016420
    Info : flash size = 32kbytes
    Warn : acknowledgment received, but no packet pending
    undefined debug reason 6 - target needs reset
    Error: address + size wrapped(0xfffffffe, 0x00000004)
    Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
    Info : JTAG tap: stm32.bs tap/device found: 0x06420041 (mfg: 0x020, part: 0x6420, ver: 0x0)
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x20002004
    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x20002004
    Warn : Block write error address 0x20002000, wcount 0xa
    Error: error writing to flash at address 0x08000000 at offset 0x00000000
    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000050, MEM_AP_TAR 0xe5cd9fb6
    Error: address + size wrapped(0xfffffffe, 0x00000004)
    Info : dropped 'gdb' connection


    Jak ominąć ten problem ?

    0 7
  • #2 07 Lut 2012 21:52
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Twój układ się wykrzacza.

    Przy używaniu funkcji variadic (ze zmienną liczą argumentów) KONIECZNE jest wyrównanie WSZYSTKICH stosów do 8.

    Poza tym w tej funkcji jest na stosie sporo zmiennych, przede wszystkim ten 100bajtowy bufor. To też może być problemem jeśli pamięć się kończy.

    4\/3!!

    0
  • #3 07 Lut 2012 21:57
    hufca
    Poziom 12  

    1. W jakim formacie jest skompilowany jest twój program? elf, bin, hex ?
    2. Pochwal się nam swoim skryptem debuggera - robisz to przez telnet czy jak? Jakich poleceń używasz do programowania i debugowania? Jak używasz pliku gdb.ini to pokaż go nam.

    Twój program najwidoczniej ma za duże zapotrzebowanie na pamięć.

    0
  • #4 07 Lut 2012 22:00
    gaskoin
    Poziom 38  

    takie błędy raczej wskazują na to, że pacjent umarł.

    0
  • #5 08 Lut 2012 00:00
    kozak_sc
    Poziom 23  

    Stosy są wyrównane do 8. A pamięci prawie nie używam, zmiennych globalnych jest jakieś 100b a stos jest ustawiony na 2000b. Trochę podłubałem w temacie i doszedłem do wniosku, że wykrzaczanie następuje gdy rozmiar kodu wynikowego zbliża się do 8kB (robię na F100c4t6b który ma 16kB).

    Dla testu zrobiłem

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i wszystko działa prawidłowo, ale tylko jak zakomentuję na tyle w innych częściach programu żeby kod miał mniej niż te 8kB.

    Po przespaniu się z problemem :
    Zwiększyłem workspace area z 0x400 do 0x800 i zaczęło działać. Tylko proszę znawców o wyjaśnienie do czego właściwie służy ten parametr ? Z komentarzy w pliku konfiguracyjnym wynika że jest to ilość ramu potrzebna do programowania flasha. Czyli rozumiem że program jest przesyłany do ramu i potem zapisywany we flashu ? Wynikało by z tego że musi być większy niż rozmiar strony pamięci flash.

    0
  • #6 08 Lut 2012 10:03
    Freddie Chopin
    Specjalista - Mikrokontrolery

    No generalnie OpenOCD do workspace pakuje kod do przegrania oraz krótką procedurkę która dokonuje faktycznego zapisu. Możesz ustawić ten parametr na dowolnie duży byle mniejszy/równy niż max rozmiar pamięci RAM.

    4\/3!!

    0
  • #7 08 Lut 2012 10:06
    gaskoin
    Poziom 38  

    Z ciekawości - jaką masz wersje oocd ? Z F100 były jaja zawsze bo początkowo programiści nie wiedzieli, że STM będą miały tak mało RAMu i założyli minimum 16kb

    0
  • #8 08 Lut 2012 10:32
    kozak_sc
    Poziom 23  

    Dzięki za odpowiedź. Też miałem na początku problemy z F100 na jakiejś starszej wersji na której np 103 działało bez problemów. Teraz używam 0.5.0. i śmiga ładnie.

    0