Adaptacja programu pod STM32F0

Wszystko o co chcesz zapytać na temat mikrokontrolerów ARM firmy STMicroelectronics: problemy z pisaniem programu, problemy sprzętowe, niejasności w DS czy AN itp.
StaryAnoda_NEW
Newb
Newb
Posty: 81
Rejestracja: środa 04 kwie 2018, 16:48

Adaptacja programu pod STM32F0

Postautor: StaryAnoda_NEW » środa 23 paź 2019, 19:38

Hej

Oglądam kurs: https://www.youtube.com/watch?v=TEq3-p0GWGI&list=PLPW8O6W-1chwyTzI3BHwBLbGQoPFxPAPM&index=24&t=0s

I chciałbym przystosować program z tego kursu pod mikrokontroler STM32F030F4. Czy możecie mi podpowiedzieć na co powinienem zwrócić szczególną uwag?
Próbowałem dostosować program, jednak po wpisaniu do rejestru R13(SP) wartości sp_blinky1. Program wchodzi do Hard Fault Handler.

Pozdrawiam
StaryAnoda_NEW

Awatar użytkownika
dambo
Expert
Expert
Posty: 623
Rejestracja: czwartek 17 mar 2016, 17:12

Re: Adaptacja programu pod STM32F0

Postautor: dambo » środa 23 paź 2019, 23:23

Może jakiś problem z wyrównaniem danych?
Zapraszam na mojego pseudobloga z projektami itp: http://projektydmb.blogspot.com/

Awatar użytkownika
elvis
Posty: 8
Rejestracja: piątek 23 mar 2018, 09:49

Re: Adaptacja programu pod STM32F0

Postautor: elvis » czwartek 24 paź 2019, 12:46

@StaryAnoda_NEW może zamieść swój program, będzie łatwiej coś pomóc. Do filmiku na YT załączony jest jakiś kod, ale raczej niekompletny.

Awatar użytkownika
xor
User
User
Posty: 158
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Adaptacja programu pod STM32F0

Postautor: xor » czwartek 24 paź 2019, 14:56

Myślę, że nie trzeba jakoś specjalnie modyfikować programu pod Cortex-M0. Oczywiście za wyjątkiem części odpowiedzialnych za inicjację i obsługę peryferiów (funkcje BSP_init, BSP_led*On/Off).
Domyślam się, że kod masz z materiałów do kursu (http://www.state-machine.com/quickstart/lesson22.zip). Jeśli tak to IMHO całkiem naturalnym jest że wywala HardFault. Ty wykonujesz procedurę z 16 minuty filmu, a ten kod dotyczy tego co jest omawiane w 21 minucie i dalszych.
W czym problem? W tym że procek wykonując unstacking przy powrocie z przerwania dostaje nieprawidłowe dane. Stos sfabrykowany dla taska main_blinky1 wygląda tak:

Kod: Zaznacz cały

    /* fabricate Cortex-M ISR stack frame for blinky1 */
    *(--sp_blinky1) = (1U << 24);  /* xPSR */
    *(--sp_blinky1) = (uint32_t)&main_blinky1; /* PC */
    *(--sp_blinky1) = 0x0000000EU; /* LR  */
    *(--sp_blinky1) = 0x0000000CU; /* R12 */
    *(--sp_blinky1) = 0x00000003U; /* R3  */
    *(--sp_blinky1) = 0x00000002U; /* R2  */
    *(--sp_blinky1) = 0x00000001U; /* R1  */
    *(--sp_blinky1) = 0x00000000U; /* R0  */
    /* additionally, fake registers R4-R11 */
    *(--sp_blinky1) = 0x0000000BU; /* R11 */
    *(--sp_blinky1) = 0x0000000AU; /* R10 */
    *(--sp_blinky1) = 0x00000009U; /* R9 */
    *(--sp_blinky1) = 0x00000008U; /* R8 */
    *(--sp_blinky1) = 0x00000007U; /* R7 */
    *(--sp_blinky1) = 0x00000006U; /* R6 */
    *(--sp_blinky1) = 0x00000005U; /* R5 */
    *(--sp_blinky1) = 0x00000004U; /* R4 */

Teraz jeśli do rejestru SP wpiszesz wartość zmiennej sp_blinky1 to procek do ustackingu weźmie wartości opisane jako R11 do R4 a powinien wziąć xPSR do R0. To co jest opatrzone komentarzem R10 zostanie wpisane do rejestru PC i program pójdzie w buraki (albo raczej biorąc R11 za xPSR nie znajdując flagi THUMB). Podmieniając rejestr SP trzeba albo powiększyć (ponieważ stos rośnie "w dół") wartość sp_blinky1 o 0x20 albo skompilować program bez kodu po /* additionally, fake registers R4-R11 */.
Niestety sam nie mogę hipotezy zweryfikować bo, nie wiadomo dlaczego, z poziomu Eclipse nie mam możliwości zmian rejestrów rdzenia a Keila nie mam :-/

Edit:
Wyjaśniła się rzekoma niemożliwość modyfikacji rejestrów rdzenia z poziomu debuggera. No więc jak najbardziej jest to możliwe. W tym przypadku breakpoint nie był ustawiony na ostatniej instrukcji handlera więc w epilogu handlera SysTicka nastąpiło nadpisanie wcześniej zmodyfikowanej wartości. LOL.
Ostatnio zmieniony czwartek 24 paź 2019, 22:12 przez xor, łącznie zmieniany 2 razy.

StaryAnoda_NEW
Newb
Newb
Posty: 81
Rejestracja: środa 04 kwie 2018, 16:48

Re: Adaptacja programu pod STM32F0

Postautor: StaryAnoda_NEW » czwartek 24 paź 2019, 19:58

Hej,

Bardzo dziękuję kolego xor za zwrócenie mi uwagi rzeczywiście, uruchamiałem program ze strony, nie pisałem go równocześnie z autorem kursu :oops:

Wszystko teraz działa. Mam jeszcze jedno pytanie czy możecie polecić mi jakąś książkę aby poznać co oznaczają to rejestry R0 do R12.
Chodzi mi o to, że nie wiem jak to na prawdę tak niskopoziomowo działa?

W załączniku program dla płytki:
https://hackaday.io/project/21434-leshy-less-expensive-stm32f0-hosting-prototypes
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
dambo
Expert
Expert
Posty: 623
Rejestracja: czwartek 17 mar 2016, 17:12

Re: Adaptacja programu pod STM32F0

Postautor: dambo » czwartek 24 paź 2019, 20:05

Są książki z serii "definitive guide to arm Mx processors".
Zapraszam na mojego pseudobloga z projektami itp: http://projektydmb.blogspot.com/

Awatar użytkownika
ZbeeGin
User
User
Posty: 334
Rejestracja: sobota 08 lip 2017, 17:16
Lokalizacja: GOP
Kontaktowanie:

Re: Adaptacja programu pod STM32F0

Postautor: ZbeeGin » piątek 25 paź 2019, 13:14

Nie wystarczy Programming Manual... https://www.st.com/content/ccc/resource ... 051352.pdf

Awatar użytkownika
xor
User
User
Posty: 158
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Adaptacja programu pod STM32F0

Postautor: xor » poniedziałek 28 paź 2019, 16:49

Jest jeden moment gdzie niezbędna może być spora modyfikacja kodu. Mianowicie w lekcji 26. zastosowanie znajduje funkcja CLZ, która dla Cortexów M3 i wyższych jest realizowana jedną instrukcją maszynową. Cortexy M0/0+ nie mają tej instrukcji w repertuarze więc potrzebna jest emulacja programowa. Nie wiem czy keilowy kompilator dostarcza taką funkcję, jeśli nie to trzeba sobie ją znaleźć/napisać samemu. W komentarzach pod filmem są linki do jakichś implementacji. Jakieś algorytmy są też w Hacker's Delight, rozdział Counting Leading 0’s.


Wróć do „ARM STMicroelectronics”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość