po co w niektórych implementacjach takich 'rozbiegówek' mamy kod assemblerowy który kopiuje adres stosu do rejestru SP procesora? STM32 może używać dwóch stosów - jednego dla przerwań (nazwanego wyjątkowo myląco "main stack") i drugiego dla wątków (nazwanego "process stack") - a więc i dla "main()". To co jest w tablicy wektorów ląduje w MSP ("main...
W skrypcie linkera. Kompilator tworzy jakieś sekcje (pewnie coś z obsługi wyjątków, takich sekcji jest kilka), które nie mają wpisów w skrypcie linkera, a więc domyślnie trafią one do RAM (tak jakbyś zrobił SECTIONS ... { ... } > RAM AT >RAM), ale zawartość tej sekcji jest inna niż same zera. Linker wypełnia więc obszar od flasha (adresy 0x8000000)...
Cześć, chciałbym debugować Hard Faulta w STM32 w ten sposób żeby mieć call stack w momencie jego wystąpienia. Czy ktoś robił coś podobnego? Niestety internet nie jest pomocny - skopiowany kod nie działa, tzn. są jakieś adresy z flasha, ale nie te które bym się spodziewał. Czy ma może to związek z tym że w Hard Fault używany jest inny stos niż podczas...
Ta sama sytuacja na STM32F04. Na Linuxach (kernel 6.4.3), Windows 11, Android, działa. Na 10 nie działa. https://obrazki.elektroda.pl/8472800600_... Najnowsze CubeIDE + aktualizacje bibliotek. Heap 0x200 Stack 0x400 Kod wygenerowany, jeszcze nie zmieniany: utworzone 2 pliki hid.h i hid2.h, hid.c korzysta tylko z hid2.h.
Możesz napisać dokładniej jak i gdzie to zrobić ? Otwórz plik startup.S (ewentualnie inna, zbliżona nazwa - nie wiem jaki dokładnie masz przykład i w której wersji), a następnie wywal z niego: ldr r0, =__process_stack_end msr PSP, r0 movsr0, #CONTROL_ALTERNATE_STACK msr CONTROL, r0 isb (to jest generalnie zawsze na samym początku wraz z odpowiednimi...
Opcja -S, o której pisałem to opcja kompilatora, do użycia w komendzie ...-gcc ..., Z tym, że tak wprost się tego raczej nie da dodać. Niestety, CubeIDE nie znam, więc od ręki nie odpowiem, jak tej opcji użyć. Dobra to po kolei :) To już znam odpowiedz na to co mnie interesowało( czyli że to jest po prostu jakiś śmieciowy rozkaz, którego procek nie...
Popatrz co ciekawego można przeczytać w skrypcie linkera /* +=======================================... | stacks sizes +=======================================... */ /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode can use main stack...
Faktycznie! Jeśli nie przekroczę 4 breakpointów to nic się złego nie dzieje. W kail-u wyświetla się okienko informujące że nie można dodać kolejnego breakpointu (max to 5). Dzięki Freddie! Mam jeszcze jedno pytanie. Chciałem użyć w projekcie kontenerów z biblioteki standardowej C++ (konkretnie vektora i kolejki) jednak gdy program chciał wykonać którąś...
Obecne startupy w przykładach dla STM32 i LPC1114 używają dwóch stosów - jeśli chcesz to zmienić (czyli wszystko będzie używało tylko MS), to - poza ustawieniem odpowiedniego rozmiaru odpowiedniego stosu w skrypcie linkera - wystarczy zakomentować w startupie linijki odpowiedzialne za ustawienie PSP oraz przestawienie stosu, czyli ten fragment: /* +---------------------------------------...
Możesz spróbować przegryźć się przez USB Host Stack z pakietu Microchip Harmony for PIC32. Cytat z dokumentacji: The USB Host Layer in the MPLAB Harmony USB Host Stack performs the tasks of enumerating an attached device and interfacing the HCD. The following are the key features of the MPLAB Harmony USB Host Layer: Supports multi-configuration and...
Korzystam z przykładu od Freddiego stm32cl_blink_led-1.2.1-120107 i tam w vectors.c jest właśnie funkcja Default_Handler która kręci się w kółko... Poza tym zadeklarowanych jest dużo funkcji w tym: [syntax=c]// System tick timer void SysTick_Handler(void) __attribute__ ((interrupt, weak, alias("__Default_Handler")));[/syntax] oraz: [syntax=c] void Reset_Handler(void);...
Zaczynam z ARM i przeglądam sobie plik linkera jaki dostarcza ST w paczkach Cube. Np. taki do F103 zawiera coś takiego jak przydział stosu i sterty dla użytkownika. /* Set heap size, stack size and stack location according to application requirements. */ /* Highest address of the user mode stack */ _estack = 0x20004FFF; /* end of RAM */ /* Generate...
watchpointa postawilem juz dluzszy czas temu, wnioski są bezużyteczne. Jakaś część RTOSa nadpisuje tamto miejsce. Problem jest raczej dlaczego nadpisuje; i dlaczego tylko w tej funkcji... Dodatkowym zonkiem jest fakt, ze nie da sie podczas pracy RTOSa zatrzymac rdzenia i go ponownie puścić - procek ląduje w hardfaultcie po puszczeniu; nawet jak jest...
No właśnie nie do końca. Skrypt startowy jak i całą resztę wziąłem z bibliotek STM. Tak samo skrypt linkera jednak tutaj troszkę pogrzebałem i stąd problem (prawdopodobnie). Mam taki plik: /* Default linker script for STM32F10x_512K_64K Copyright RAISONANCE S.A.S. 2008 */ /* include the common STM32F10x sub-script */ /* Common part of the linker scripts...
W celu uruchomienia kodu z pamięci RAM (aby pamięci FLASH nie nadwyrężać zbytnio..) użyłem skryptu linkera przeznaczonego dla Attolic TrueStudio, ze standardowej paczki firmware dla stm32 discovery. Jednakże po wgraniu programu, nie uruchamia się, w związku z tym pytanie, co trzeba jeszcze ustawić aby uruchomić kod z RAM'u ? poniżej wspomniany skrypt...
Witam Uruchomiłem na STM32F107 stos LWIP korzystajacz z przykladu z ksiązki stm32 w sieci ethernet, natepnie dodałem serwer http z paczki contrib LWIP. Wygląda na to, że wszytsko dziła, pingi lecą, strony www sie ładują. Nastepnie uruchomiłęm bootloader ethernet z przykałdów od ST. Tak wyglądą start Dodano po 56 okazła sie że procerk ląduje w HardFault_Handler,...
Cześć, nadszedł czas zmierzyć się z linkerem i innymi cudami ;) Wybaczcie, jeśli będę pisał głupoty, dopiero próbuję to ogarnąć :D Czy możecie podpowiedzieć jak uwzględnić w Eclipse dwa warianty kompilacji i linkowania: 1. program w trybie DEBUG, który startuje klasycznie z 0x08000000 2. program w trybie RELEASE, który ma startować z 0x08002000 Odnośnie...
Najprościej wygenerować przez jakieś darmowe środowisko, np.: Atollic TrueSTUDIO. [syntax=asm] /* ****************************************... ** ** File : stm32_flash.ld ** ** Abstract : Linker script for STM32F373C8 Device with ** 64KByte FLASH, 32KByte RAM ** ** Set heap size, stack size and stack location according...
Budowa toolchainu pod systemem LINUX dla urządzeń z rdzeniami: CM0+ ( instrukcje są generyczne-czyli uogólnione i działają na procesorach: CM0+/CM0+F/CM3/CM3F/CM4/CM4F/CM7/CM7F ), oraz CM4F. Całość jest w postaci wizardu konsolowego i została fajnie opisana na stronie http://www.iwasz.pl/electronics/toolchai... Generowany kod jest kompaktowy...
Proponuję kol (at)R-MIK zapoznać się wpierw z tą "krótką lista prostych rozkazów" Cortex-ów a nie fantazjować. Jak bedę musiał to sie zapoznam. Jak pisałem wcześniej, kiedyś do startup dla LPC potrzebowałem, teraz nie muszę, ale lista nie jest obszerna, przynajmniej w THUMB: nstruction Type Instructions Move MOV Load/Store LDR, LDRB, LDRH, LDRSH, LDRSB,...
Kod Reset_Handler przedstawia się tak: void Reset_Handler(void) { unsigned long *pulSrc, *pulDest; // Fill the stack with a known value. for(pulDest = pulStack; pulDest < pulStack + STACK_SIZE; ) { *pulDest++ = 0xA5A5; } // Copy the data segment initializers from flash to SRAM. pulSrc = &_flash_data; for(pulDest...
Hmmm. Wgrałem oryginalny program z Stm32 MassStorage. vectors.c startup.S i .ld o kolegi Freddie Chopin. Mam obecnie dwa przerwania z Usb: USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler ( w vectors.c było bez jedynek kolo CAN ). Zrobiłem takie coś, orginalny program void USB_HP_CAN1_TX_IRQHandler(void) { CTR_HP(); }...
Witam Hmm, walczę od jakiegoś czasu z uruchomieniem toolchaina Eclipse + CodeSourcery itd dla STM32 (dokładnie STM32F107VCT) i mam pewien problem. Przejrzałem kilka różnych projektów, w których podpatrywałem pliki skryptowe linkera (*.ld) jak i pliki makefile. Na razie kompiluje mi się gdy przykładowo zrobię plik main.c z takim kodem: STM32F10x_StdPeriph_Lib_V3.5.0...
Wygenerowany jest bezpośrednio z CooCoxa Linkera tutaj nie ma chyba jest zaszyty w środowisku. Wersja CoIDE to: Version: 1.7.8 [syntax=c] /** ****************************************... * (at)file startup_coide.c * (at)author Coocox * (at)version V1.0 * (at)date 20/07/2010 * (at)brief M0 M3 Devices Startup code. *...
Co do STM32 to sprawa wygląda tak: -biblioteki do USB-a są na stronie ST -Stos TCP/IP jest na stronie ST ( lwIP TCP/IP stack ) ilość RAM-u na obsługę zależna jest od Ciebie i od kryteriów transmisji. -Polecam FREE RTOS-a, który jest darmowy, pełno przykładów na ten i nie tylko uC. Jeżeli potrzebujesz czegoś bardziej wypasionego to możesz zawsze kupić...
GPIOA->BSRR |= GPIO_BSRR_BS5; To nie źródło problemu ale tak się tego rejestru nie używa. To jest write only rejestr czyli tylko samo przypisanie Zgadza się, dzięki :) Co do głównego problemu, punkt 1. Użyj debugera okazał się bardzo pomocny :) Założyłem, że skopałem coś w Makefile (np. brakuje jakiejś flagi) i podczas debugowania nic ciekawego...
A czy uważasz że wszystko jest linkowane? Twoje pytanie sporo sugeruje. Jakoś bylem zafiksowany na to, że w ten sposób dołączany kod musi być "wrzucony" w całości, ale cóż błądzenie to rzecz ludzka, sporo wody jeszcze upłynie zanim takie mechanizmy będą dla mnie zrozumiałe :) Cały czas mam przed oczami ten goły kod, który do STM32F103VCTx się nie mieścił,...
No normalnie to ładujesz swojego bootloadera do flasha przy pomocy powiedzmy flash magic. A następnie generujesz sobie BIN swojej aplikacji w ofsetem i tego BINa podsuwasz bootloaderowi i on używając IAP powinien to wpisać do flasha. Ok, wszystko się zgadza, ale ja chciałem wgrać to bez użycia bootloadera - z wgraniem już sobie poradziłem. Pojawił...
Próbuję przesiąść się z bibliotek SPL na LL To nie bardzo ma sens. Bo to właśnie HAL jest bezpośrednim zamiennikiem SPL a sam w sobie LL według filozofii przedstawianej przez STM służy bardziej w sytuacjach kiedy koniecznie potrzeba kodu o mniejszej zajętości pamięci czy szczególnie szybkiego. Z tym że jak ostrzega STM, wymaga od programisty głębokiej...
No wiec tak, te dwie rzeczy są takie same w obu twoich przykładach i ich nie zmieniałem: __main_stack_size = 0; __process_stack_size = 1024; Przedstawiam poniżej to co teraz mam w moim projekcie: STM32F103RC_rom.ld [syntax=c]/*****************************... * author: Freddie Chopin, http://www.freddiechopin.info/...
Wydaje mi się że mnie plik wygląda okay [syntax=c] /** ****************************************... * (at)file startup_stm32f030xc.s * (at)author MCD Application Team * (at)version V2.3.0 * (at)date 27-May-2016 * (at)brief STM32F030xc/STM32F030xb devices vector table for Atollic TrueSTUDIO toolchain. * This module performs:...
michalko12: Zmieniłem xHandleTaskLED1, xHandleTaskLED2 na static, ale nic to nie pomogło. xLastFlashTime nie można: error "initializer element is not constant". W keilu żadnej tej zmiennej nie miałem jako static a program działał więc podejrzewam, że nie tu jest problem. Dodano po 4 Smashing: Jak wrzucam Twój program do Eclipsa to się nawet nie kompiluje...
Witam temat podobny do http://www.elektroda.pl/rtvforum/topic23... Lecz sprawa wygląda troszkę inaczej. Z racji tego, że atollic udostępnił wersję litte postanowiłem przesiąść się z keila. Dotychczas korzystałem z example usb hid na keila. W Atollicu skonfigurowałem sobie nowy procesor, wrzuciłem kod z uvision i po małych przeróbkach (dostosowanie...
Witam wszystkich. Od jakiegoś czasu ćwiczę STMy. Przyszedł czas na bootloader, ale stanąłem w zasadzie na początku drogi. Mój zestaw to: - ARM GCC (Linaro) w wersji 4.7 2012q4 - CooCox - STM32F4 Discovery - przykład AN3965 "STM32F40x/STM32F41x in-application programming using the USART" Po kolei: - istniejący i działający program zlinkowałem z użyciem...
Cześć, Projekt zaraz będę konfigurował od początku. Fakt, podałem za mało danych, wybaczcie, skrajna nerwica mnie na to wzięła. Od początku: Używam SW4STM32, ale chciałbym od tego odejść mocno, bo za dużo automatów i za mało szczegółów, może dlatego, że nie potrafię tego wszystkiego ogarnąć. Kompilatora używałem poprzez naciśnięcie "build". W ustawieniach...
Witam Po jednodniowej radości związanej z prawidłową pracą klona amonteca od Freddiego nadszedł kryzys... Aktualnie IAR nie jest w stanie wgrać nawet programu do flasha. W oknie konsoli IAR-a głownie jest Verify error at address.. W gdb: http://obrazki.elektroda.net/3_126701690... Wyrocznia podpowiada: "...I suspect some interrupt routine or...
Hej Freddie, tym razem to już mam poważny problem i proszę Cię o pomoc. Problem mam cały czas z przerwaniami. Nigdy mi w sumie tak naprawde nie zadziałaly na tym projekcie od stm. Przerobiłem Twoją tablice wektorów przerwań: /** \file vectors.c * \brief STM32 (STM32F101 - STM32F103) vector table and __Default_Handler() * \details STM32...
Dzięki za odpowiedź! Udało się całość skompilować. Przykład jest dostarczany przez STM jako "STM32F107xx connectivity line Ethernet low-level driver and web server demonstration based on uIP TCP/IP stack". Co do podwójnego includowania tych plików. Należy przenieść dwie ostatnie definicje (z samego końca pliku) z fsdata.c do fs.c (zaraz po include)...
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
Nie ma jakiegoś sposobu na sprawdzenie co go kieruje na default handler? Pewnie że jest i to nie jeden (; Dorzuć do swojego projektu gdzieś coś takiego: w okolicy miejsca które spowodowało problem. Patrzysz wtedy do pliku .lss i patrzysz co znajduje się w zakresie +/- 3 instrukcje od tego miejsca. 4\/3!!
Hard Fault może oznaczać włączenie przerwania do którego nie napisano obsługi. Mylisz się. Standardowa rozbiegówka definiuje "słabe" handlery przerwań zawierające puste nieskonczone pętle. To nie ma nic wspolnego z hardfault'em. Hardfault leci generalnie na 1) dostęp do nieistniejącej pamięci, 2) nierozpoznaną instrukcję rdzenia, 3) nad użycie magistral...
0x00000100 to jest już 1kB 0x00000600 to jest 6kB Zwiększ do 2kB - #define STACK_SIZE 0x200
Można po prostu nie załączać do zródeł kompilowanych przez kompilator C, nagłówków zawierających składnię C++... Jeżeli chcesz używać generatora, po prostu cały kod używający konstrukcji C++, zamieszczasz w osobnym pliku, który będzie kompilowany przez kompilator C++ i wołasz z main.c jakąś funkcję, która została napisana w C++. Funkcja oczywiście musi...
Proszę o pomoc szczególnie freddiego chopina ponieważ jest autorem plików linkera, startup-a i wektora przerwać(vectors.c), które w innych projektach jak dotąd działałają mi niezawodnie. Zajrzyj do skryptu linkera, przeczytaj ze zrozumieniem jego początkowy fragment, ustaw tak jak trzeba i będzie działać. Kluczową sprawą jest przyswojenie sobie tego...
Tutaj o .AppendText vs .Text+= https://stackoverflow.com/questions/2063... Wychodzi na to, że zależy to od ustawień. Ale rich textbox chyba domyślnie jest multiline... Dodano po 4 Jeżeli wszystkie testowane terminale odbierają poprawnie, to znaczy, że MCU wysyła poprawnie. Zrób sobie jakiś krok pośredni....
__main_stack_size = 0; __process_stack_size = 1024; Zmieniłem na __main_stack_size = 1024; Jak na razie działa, dzięki.
(at)xury jednak wszystko jest ok. Ponieżej ten sam przypadek i opis: https://stackoverflow.com/questions/7076...
Info o różnych stosach jest całkiem niedaleko - w pewnych przykładach /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode can use main stack (default) or process stack - selected in CONTROL special register */ __main_stack_size = 0; __process_stack_size = 1024; 4\/3!!
Zobacz [url=https://stackoverflow.com/questions... Overflow: 'Failed to execute MI command:(...)'.
Ok, dziękuję za odpowiedź. A gdzie znajdują się informacje na temat stosu? Jego lokalizacji. I co oznacza main stack i process stack? U mnie ten drugi jest ustawiony na 0. Chciałbym wiedzieć co to oznacza.
stack stm32 bluetooth stack stack toshiba
marcin laser renault migający check ładowania scania akumulator
xiaomi elite wzmacniacz czesciowy
Mostkowanie bezpiecznika zwłocznego - czy to bezpieczne? Kasowanie błędu poduszek w Opel Corsa 2005