Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
Zgaduję, że w tym przypadku w pliku startupxxx.s masz ręcznie zmienić rozmiar stosu. Lepiej jednak i prościej będzie zwyczajnie nie deklarować dużych tablic w procedurach, bo to fatalny nawyk w przypadku mikrokontrolerów, zwłaszcza, kiedy programista jest początkujący i nie wie, gdzie się zmienia rozmiar stosu... ;).
Jeśli chcesz używać przerwań, to musisz zadeklarować rozmiar stosu dla przerwań... W przykładzie nie ma przerwań, więc rozmiar tego stosu wynosi 0. 4\/3!!
Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie Przeczytaj ten wątek i kup sobie inną płytkę. https://www.elektroda.pl/rtvforum/topic3... Jeśli koniecznie chcesz się męczyć z chińskimi podróbkami, to na mojej stronie ( http://www.freddiechopin.info/ > Download > ARM > Przykłady > stm32_blink_led) znajdziesz szablon...
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
Mam pytanko czy, żeby przerwania poprawnie działały na podstawie tego szablonu od f4, to czy wystarczy tą tablicę przerwań skonstruować zgodnie z datasheetem od f3, czy wymagane są jeszcze jakieś inne zabiegi działania w kodzie?? Może być jeszcze wymagane dostosowanie rozmiaru odpowiedniego stosu
Skrypt linkera z Cube'a "działa" tak, że na początku pamięci ram ląduje sekcja data (zmienne inicjalizowane przy starcie programu - lokalne statyczne i globalne), potem jest bss (zmienne zerowane przy starcie programu - nie inicjalizowane statyczne i globalne). Następny kawałek to _user_heap_stack - czyli sterta i stos "w jednym". Rozmiar data i bss...
Na razie mam ustawione: __main_stack_size = 1024; __process_stack_size = 1024; i wszystko działa poprawnie. Gdy będzie jeden stos to jaki rozmiar założyć ?
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 4\/3!!
Spróbuj zwiększyć rozmiar stosu w Twoim startupie do np 1kb
Masz jakoś zdefiniowany rozmiar stosu dla przerwań? Jeśli korzystasz z mojego skryptu linkera, to w pliku tym musisz sobie zdefiniować jaki jest rozmiar stosu, bo bez tego przerwania się sypią. 4\/3!!
Jeśli zmiana rozmiaru buforów powoduje że program przestaje działać oznacza to że prawdopodobnie kończy się pamięć na stosie. Kilka rozwiązań jest. 1. zwiększyć stos 2. zdefiniować bufory jako static albo zmienne globalne wtedy nie trafią na stos 3. jeżeli idea projektu na to pozwala podzielić odczyt na mniejsze paczki i zapisywać po trochu(używając...
Jak go rozwiązałeś? W pliku startup wywaliłem 2 rozkazy i wstawiłem tam "siłowe" wpisanie adresu 0x20005000 do SP tuż przed wejściem do funkcji main. Jednocześnie testuję jednak drugi projekt w którym stos ustawiany jest z sugestiami Freediego - zwiększyłem po prostu rozmiar stosu w ustawieniach linkera i przetestuję czy stos nie wejdzie na dane.
lbo dlatego, że zwiększyłem STACK_SIZE z 64 do 128 Chodzi o rozmiar stosu dla taska, czy dla całej aplikacji? <: 4\/3!!
Zmienia się tylko w razie potrzeby, normalne ustawienia domyślne są dobre w większości przypadków. Np. zegar jest ustawiany w tryb PLL na max. częstotliwość. Wielkość stosu też ustawiona jest w marę optymalnie.
Czyżby źle dobrany procesor ? Zajrzyj do skryptu linkera i ustaw rozmiar stosu dla przerwań. Jaką masz dokładnie zainstalowaną wersję wtyczki GDB Hardware Debugging?
Pierwsza opcja to oczywiście zdefiniowanie NAPRAWDĘ DUŻEGO stosu, ale to średnie rozwiązanie jak wiadomo [; Do rozbudowanej aplikacji na ARMa myślę że należy liczyć minimum 1kB, jeśli używa się jakichś potwornych funkcji standardowych (printf!) i to głęboko to lepiej zaopatrzyć się w 2kB (o apetycie tych funkcji na pamięć pisałem ostatnio http://www.elektroda.pl/rtvforum/topic13...
Dzięki za chęć pomocy mi, ale chyba nie jestem w stanie tego ogarnąć. No ale czego? Jak mają Ci działać przerwania, skoro rozmiar stosu dla nich wynosi 0 bajtów? Tu nie ma co ogarniać tylko trzeba przeczytać ze zrozumieniem komentarze. 4\/3!!
A masz dobrze ustawiony rozmiar stosu i sterty w startup.s ? Być może za mało przydzieliłeś im pamięci i stąd taki efekt.
A rozmiar stosu ustawiłeś? To taka słynna pułapka Freddiego na początkujących. ;) Poszukaj w podobnych wątkach (wracają co tydzień), to znajdziesz rozwiązanie.
Temat jakoś umiera śmiercią naturalną. Pozwolę sobie nieco odświeżyć. Hardware: - HY-mini (Cortex M3) - LCD ze sterownikiem ssd1289 (FSMC) - karta sdhc (SDIO) Software: - fatfs R0.10 („testowałem” też wcześniejsze wersje) - „HAL” dla fatfs – silnie wzorowany na przykładach dołączonych do HY-mini i przykładach sugerowanych...
W tym kawałku skryptu linkera masz rozmiar stosu dla przerwań ustawiony na 0, a przecież FreeRTOS je wykorzystuje. 4\/3!!
Otwierasz plik startup_xxxxx.s, klikasz poniżej okna edytora w zakładkę Configuration Wizard i ustawiasz rozmiar stosu. Radziłbym jednyk przemyśleć deklaracje danych. To na ogół nie jest dobry pomysł, żeby mieć zmienne lokalne procdury o objętości setek bajtów lub więcej.
Zwiększ rozmiar stosów, bo przerwania mogą po prostu przepełniać stos. No i jeśli ich nie potrzebujesz, to wyłącz możliwość przerwań zagnieżdżonych. 4\/3!!
Teraz pozostało mi przenieść projekt z stm32 na lm3s, ponieważ zajmuję się tym w wolnym czasie od pracy, to efektem podzielę się pewnie za kilka dni. To naprawdę nie jest dużo roboty, generalnie (pomijając detale typu zmiana nazw plików czy nazwy projektu) trzeba zrobić mniej więcej "aż" tyle: 1. poprawić tablicę wektorów (to i tak byś miał kiedyś...
Trzeba zmienić PROGRAM. Domyślnie w STM32 tablica wektorów znajduje się w flash, a to skąd uruchamiasz program czy jak jest skompilowany nie ma żadnego znaczenia. Manual: Boot from the embedded SRAM: SRAM is accessible only at address 0x2000 0000. Note: When booting from SRAM, in the application initialization code, you have to relocate the vector table...
Chcę móc dynamicznie alokować pamięć, której rozmiar jest z góry znany, a nie ograniczony stosem. A mółbyś tę myśl rozwinąć? Czy stos ma wielkosć nieznaną bo nie rozumiem.
Bardziej chodziło mi o to że, nie jest dobrym pomysłem deklarowane dużych zmiennych na stosie. A taki typedef tylko utrudnia decyzje: [syntax=c] T_Localization Lokalizacja; size_t rozmiar; [/syntax] Niby jedno i drugie typedef ale ...
Jeśli problem zaczął występować po włączeniu jakichkolwiek przerwań, to sprawdziłbym na samym początku rozmiary stosów.
Bierzesz przykładowy projekt z mojej strony, wrzucasz do tego FreeRTOSa - czyli dodajesz katalogi FreeRTOSa do odpowiednich pól w Makefile: [syntax=bash]# additional directories with source files (absolute or relative paths to # folders with source files, current folder is always included) SRCS_DIRS = FreeRTOS FreeRTOS/portable/GCC/ARM_CM3 FreeRTOS/portable/MemMang...
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: /* +---------------------------------------...
Ja za to mam pytanie do Freddiego: Mam tu taki przykładowy blinky led dla F103 z Twojej strony i tam stos (stosy bo i MSP i PSP) jest ustawiony między sekcją .bss i stertą. Dlaczego tak? A dlaczego by nie? (; W swoich projektach (praktycznie wszystkich) przyjąłem, że rozmiar stosu jest określony wprost. Z tego względu nie muszę go umieszczać na końcu...
(void (*)(void))&__main_st... Pytanie jak działa ta konstrukcja ?? Pytasz o składnię czy o to dlaczego to inicjalizuje stos? mianowicie po odpaleniu GDB mam coś takiego Warn : not enough working area available(requested 16384, free 16336 Zignoruj - OpenOCD pisze, że ma mniej working area niż to zadeklarowane w pliku...
Rozmiar stosu? 4\/3!!
Obsługa UART'a przez DMA czy (tylko) przerwania to najniższa warstwa stosu - to co zrobimy z danymi dalej zależy już od konkretnego przypadku. Przerwania i FIFO (o odpowiednim rozmiarze) znacząco odciążają CPU ale korzystając z DMA zostają tylko przerwania przy zakończeniu nadawania/odbioru. Poza przypadkiem, kiedy trzeba analizować każdy nadchodzący...
Jaki masz rozmiar stosu? BTW - to będzie najmniej wydajna biblioteka do HD44780 na planecie, a wszystko to dzięki bibliotece peryferyjnej od ST. No i formatowanie tego kodu to też tragedia. 4\/3!!
Witam! Eclipse Kepler Sourcery CodeBench Lite 2011.09-69 OpenOCD 0.6.1 STM32F103ZET6 Szablon projektu - Freddie Chopin Do tej pory wszystkie projekty na STM32 działały dobrze jednak teraz buduję większa aplikację i pojawiają się problemy. Objawia się to losową zmianą wartości zmiennych np. zadeklarowanych jako const czy przerwaniem __Default_Handler....
Tak na przyszłość - na stosie lepiej nigdy nie tworzyć obiektów większych niż kilkaset bajtów, zwłaszcza że stos często ma ograniczony rozmiar (np do 1kB, poniżej są już inne zmienne). Do tak dużych elementów lepiej coś globalnego, albo jak koniecznie musi być zwalniane albo potrzebne jest rzadko, to malloc() / new. 4\/3!!
Próbowałem najpierw skopiować "na głupiego" kod z drugiego linku, niestety zawieszał się w EE_Init(); Spróbowałem ten cały przykład z mbed przenieść do SW4STM (ale bez biblioteki mbed, tylko do szablonu z CubeMX) i po drobnej kosmetyce chodzi całkiem dobrze. Kod jest dobry a przyczyną zawieszania pod SW4STM jest, jak się obawiałem, nieskuteczność tego...
wstawię cały projekt... Panuje w nim pewien chaos za co z góry przepraszam, ale służy mi to tylko nauce/zabawie... Z góry dziękuję za pomoc. PS: Jeśli chodzi o moją naukę to może właśnie źle robię? Bo posiadam książkę "STM32 Aplikacje i ćwiczenia w j.C. M.Galewski" i staram się robić kolejne ćwiczenia które w niej występują z tym że tam autor korzysta...
Nie nie nie nie... Heap nie ma ze stosem nic wspólnego, bo heap służy do alokacji DYNAMICZNEJ. Swoją drogą niezły "problem" - "Mam procka z 20kB RAMu i jak mu dam lokalną zmienną o rozmiarze 22kB to się wywala... Co z tym zrobić?????///???". No comment... 4\/3!!
1. Co będzie jak nie wyrównam stosu, kiedy natknę się na problem? Zasadniczo problem występuje praktycznie tylko przy przekazywaniu 64-bitowych zmiennych do funkcji o zmiennej ilości argumentów, takich jak printf() (tutaj od razu uwaga - 32-bitowy float dla takich funkcji zawsze jest konwertowany do 64-bitowego double). Ze względu na to jak zdefiniowane...
Podciągnę jeszcze temat z ciekawości. Dlaczego w skrypcie linkera ustawiona jest wartość 0 dla rozmiaru głównego stosu? Ten stos (w modelu z dwoma stosami) wykorzystywany jest przez przerwania, to nie powinien mieć jakiegoś rozmiaru?
Audio, wideo, ile kanałów, tylko RTP czy też inne elementy stosu media? Ze względów licencyjnych (BSD) poleciłbym re/rem/baresip, oRTP to GPL lub licencja komercyjna. Prostą, naiwną implementację stosu media można zrobić od zera w kilka godzin: http://tomeko.net/projects/rtp_pager_eth... (tylko odbiornik audio, bufor jittera o stałym rozmiarze, brak PLC,...
Zaczynam się zastanawiać czy odpowiednio zmodyfikowałem skrypt linkera z przykładu (stm32f103xB) bo te cuda które się dzieją wskazują raczej na problemy ze stosem. Objawem problemów ze stosem są "losowe" zawieszenia programu lub tzw. "pójście w maliny". To że jakaś funkcja nie działa raczej nie ma nic wspólnego ze stosem... Modyfikacje skryptu linkera...
https://obrazki.elektroda.pl/6678526600_... https://filmy.elektroda.pl/59_1553290096... https://obrazki.elektroda.pl/6296500900_... https://obrazki.elektroda.pl/9260337200_... Zapewne nic odkrywczego ale wolnej chwili udało się połączyć parę projektów i wyszło takie coś. Jeśli chodzi o hardware to...
Moje wątpliwości budzi: Thread mode can use main stack Nie miałym dotąd potrzeby zastanawiania się nad tym, w jakim mode działam. Przerwania działaja w jednym trybie, "nie-przerwania" w drugim. Ponieważ każdy tryb używa osobnego stosu, to konieczne jest ustawienie DWÓCH stosów. Nie są zbyt zagnieżdżone przerwania, zresztą spod keila program działał....
http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Na początek może pożegnaj się ze starociami i zainstaluj coś nowego (CodeSourcery). Co do reszty: Moim zdaniem nie ma sensu pisanie samemu tych plików, ale warto rozumieć co i dlaczego tam jest. Szczególnie nie warto pisać ich "tylko pod konkretny zestaw",...
Standardowo proponuję zacząć od zwiększenia rozmiaru stosu, a następnie od pokazania reszty plików projektu, szczególnie tych w których integrujesz handlery przerwań z odpowiednimi funkcjami FreeRTOSa (hint: jeśli nie wiesz o czym piszę, to jest spora szansa, że tego nie zrobiłeś, w efekcie masz efekt dokładnie taki jak opisujesz).
Ale po uploadzie core blokował się, komunikat: the core is locked up! Skoro używałeś przerwań, to pewnie problemem był rozmiar stosu dla przerwań (konfigurowany w skrypcie linkera, domyślnie zero), więc układ się wieszał. Faktycznie to mógł być powód, bo tego nie zmieniałem, a przykład był skrojony na miganie diodami bez użycia przerwań. W moim przykładzie...
1. Biorę przykład projektu ARM (akurat ten dla STM32, bo posiadane przezemnie LPC2103 ma za mało pamięci flash na te okrutne funkcje printf()) z mojej strony - http://www.elektroda.pl/rtvforum/topic13... 2. Wrzucam do main() następujący kod: #include <stdio.h> #include <math.h> #include <errno.h> #include <sys/types.h>...
Czyli nie dość, że na stosie masz 1 kB tablicę, to jeszcze używasz funkcji która jest znana z tego, że używa naprawdę DUŻO stosu. Zacznij od zmniejszenia tej tablicy albo przeniesienia jej do zmiennych globalnych, a następnie - jeśli nie pomoże - znajdź jak w Keilu zwiększyć rozmiar stosu. Wielkie dzięki, pomogło. Przeniosłem do globalnych Do sekcji...
Elektronika praktyczna: Dzięki za linki ale wydaje mi się ze jest to prawie to samo co w książce "Mikrokontrolery STM32 w praktyce" lecz przykład który był dołączony nie kompiluje się u mnie więc jeśli masz przykład do pierwszego artukułu to proszę o linka ; ). Na ChibiOS/RT natknąłem się ale wydawało mi się że FreeRTOS jest starszy i bardziej popularny...
Właściwie nie zaczynam, optymalizacją wyłączona, dlatego jestem zaskoczony. Czy powinienem może zmienić rozmiar sterty lub stosu, bądź ustawić jakąś opcję dodatkowo? Program Size: Code=24376 RO-data=396 RW-data=768 ZI-data=11176 STM32F103 (20KB RAM, 128FLASH), Keil 5.10.0.2 Stack_Size EQU 0x00001000 Heap_Size EQU 0x00000800 Przyznam jedynie że nie mam...
Jeśli używasz DIY toolchain wg. Freddiego, to zapewne właśnie wpadłeś w jego słynną pułapkę z brakiem stosu. Dlaczego nie napiszesz "Jeśli używasz układów ARM to właśnie wpadłeś w ich słynną pułapkę z ustawieniem czegokolwiek-co-nie-ustawia-się-samo"? Rozumiem że w "DIY toolchain wg. BlueDraco" stosy magicznie ustawiają się same? Rozumiem też, że preferujesz...
A rozmiar stosu ustawiłeś?
http://obrazki.elektroda.pl/5987689600_1... Witam :) Chciałem dzisiaj zaprezentować projekt który ostatnio wykonałem Prezentowany układ to uniwersalny programator / debugger (JTAG,SWD) / konwerter USB -> UART wspierający szeroką gamę mikrokontrolerów (począwszy od 8bitowych do 32 bitowych) :) http://obrazki.elektroda.pl/3192493300_1...
Szukałem, jednak nie potrafię znaleźć co to dokładnie jest te wyrównanie do 4 bajtów. Szukaj pod hasłem attribute aligned. Program wskakuje mi często do Default Handler. Rozmiar stosu już ustawiłem na dużą wartość, nic to nie pomogło. Może to być tego wina? Zdarzają się przypadki, że przyczyną wyjątków jest "niewyrównany" dostęp, ale w tym przypadku...
Cześć Zabrałem się za zabawę z ethernetem na zestawie butterfly (STM32F107) + ZL2ETH. Pracuję na najnowszej wersji code sourcery, makfile i startup by Freddie Chopin + stos LWIP. Po początkowych problemach udało mi się zaininicjalizować PHY i na switchu zaświeciła się diodka, i to był początek problemów. Po dokładnym sprawdzeniu wszystkiego i wyeliminowaniu...
Rozmiar stosu można przewidzieć maksymalnym zagnieżdżeniem, ale uwaga na rekurencje :P Ale na stosie są odkładane nie tylko wywołania, zmienne automatyczne też tam lądują, tak samo jak parę innych rzeczy więc można jedynie tak jak mówisz oszacować mniej więcej ile stosu będzie wykorzystywanego, ale to będzie tylko marne przybliżenie. To samo tyczy...
Wszystko da się zrobić, ale nie wszystko ma sens. Moduły będą miały strukturę płaską tzn wywołując moduł z modułu nie będzie się zmieniał stos moduły wiedzą który jest kolejny a który poprzedni moduł. I tu chyba nie rozumiesz, o czym piszesz. Jeśli jeden moduł woła drugi, to ten drugi musi wrócić do tego pierwszego, a takie wywołanie zajmuje miejsce...
Ponieważ aktualnie mierzę się z podobnym problemem w driverach zaimplementowanych w moim RTOSie, powiem Ci szczerze, że taki sposób obsługi SPI jest po prostu niemożliwy do zrobienia poprawnie i tak żeby osiągnąć jakąś rozsądną częstotliwość. Sytuacja którą obserwujesz jest stosunkowo prosta. Natychmiast po uruchomieniu transmisji masz pierwsze przerwanie...
Ponieważ dopuszczalne są też pytania z dziedziny, być może tych niemądrych Bynajmniej nie jest to żadne "niemądre" pytanie. Jest bardzo dobre i pokazuje właśnie jak bardzo zmitologizowane są RTOSy. czy taki STM32G070RBT6 z 36 KB ram oraz 128 KB flash (w detalu ok. 5.5 zł) to już się nada czy nie do RTOS? Jak najbardziej. Ilość flash jest zwykle mało...
http://obrazki.elektroda.pl/7258579400_1... Witam. Chciałem dzisiaj przedstawić kolejny projekt z cyklu "inni mają - mam i ja" ;) Tym razem jest to miniaturowy sterownik ethernetowy - " uWebServer ". Układ zbudowany został w oparciu o mikrokontroler Cortex-M3 - STM32F103C8T6, do tego kontroler ethernetu "znany i lubiany" - ENC28J60. Całość...
Mam podobny problem i również z tym walczę na F107. Podpinam się :) Zmieniłeś rozmiar stosu main w skrypcie linkera od Freddiego ?
Firmowy bootloader mi nie wystarczy. Potrzebuje SPI i prawdopodobnie USB. Ustawiłem w pierwszym programie na: NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00003000); i w drugim na: NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00000000); Więc tablica wektorów powinna się przełączać, ale dalej miga tylko czerwona dioda. Uruchomiłem dodatkowo TIM4 i przeniosłem...
Rdzenie m0, m0+ i m1 są dość podłe bo są strasznie okrojone w stosunku do m3, ale dzięki temu rozmiar samego układu jest bardzo mała. Te układy mają np ograniczone możliwości adresowania (nie odczyta nie parzystego adresu, kończy się to hard faultem). Cóż tablica charów musi być trochę inaczej obsługiwana niż by to było normalnie zrealizowane. http://infocenter.arm.com/help/index.jsp...
Czy w skrypcie linkera (pochodzącym z odpowiedniego przykładu) ustawiłeś odpowiedni rozmiar stosu dla przerwań, z których zamierzasz korzystać?
Czyżby? Czy dla AVR ktokolwiek przejmuje się skryptami linkera, startupem, tablicą wektorów i Makefilem? Przecież dla tej platformy jest DOKŁADNIE TAK SAMO jak dla ARM, a jakoś nikomu nawet na myśl nie przyjdzie zajmować się tymi plikami - każdy korzysta z gotowców zawartych w pakiecie avr-gcc. Te pliki tam fizycznie są, nikt nie zajmuje się tym jak...
http://obrazki.elektroda.pl/1647269200_1... Witam wszystkich Tym razem chciałbym przedstawić jeszcze programowy projekt odtwarzacza i dyktafonu zrealizowany na STM32F4Discovery. Pisząc ten program, sporo rozwiązań wykorzystałem z mojego poprzedniego projektu małego odtwarzacza MP3 na ARM-ie, ale dołożyłem też dużo nowości i usprawnień....
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 [syntax=c]int sscanf_( char *src, const char *format,...
Którego stosu i czy aby na pewno tego co trzeba? Jeśli używasz moich plików (skrypt linkera, startup, itd.) to polecam ze zrozumieniem przeczytać opis powyżej rozmiarów stosów w skrypcie linkera. 4\/3!!
Wygenerowałem sobie prosty projekt na układ STM32F070CBTx w CubeMX i odpaliłem w Keilu. Jedyne co włączyłem w CubeMX-ie to w RCC zegar - zewnętrzny kwarc 12 MHz i USB_FS skonfigurowane jako VCP (CDC). Po załadowaniu do Keila i skompilowaniu programu wgrywam go (J-Linkiem po SWD) do mojego układu na płytce. I nic się nie dzieje, a komputer (do którego...
Bo rozmiaru stosu nie da się ograniczyć "programowo" - po prostu jak go źle określisz to w różnych przypadkach mogą (ale nie muszą) wystąpić różne problemy. Tutaj pewnie stos ustawiany jest na końcu pamięci, wiec zanim coś zajedzie to chwila minie. Nie wiadomo też czy używane są dwa stosy czy jeden... P.S. Jeśli plik który pokazałeś jest z TrueStudio,...
(at) mrh Do mnie kod z Atollic doszedł w ciągu kilkunastu sekund. (at)Freddie Chopin Wersja Lite nie jest ograniczona ani czasowo, ani rozmiarem kodu i chyba nawet można jej używać komercyjnie. :D Jest okrojona funkcjonalnie w stosunku do wersji profesjonalnej. Listę różnic można znaleźć na stronie Atollic. Szczegółów nie znam, bo nie używam. Zainstalowałem...
Pierwsza propozycja, w czwartym wywołaniu zamiast oczekiwać 10000 itemów przestaw się na oczekiwanie 8400 itemów, wtedy nie będziesz musiał przerywać pracy DMA w innym przerwaniu (takie przerwanie pracy może powodować błędy). A miałem napisać w pierwszym poście że nie ma to sensu :D Taki sam efekt uzyskam ustawiając transfer na 9600 itemów. A nawet...
Zwiększyłem rozmiar stosu w CubeMX przy generowaniu projektu Napisałem Ci chyba, że to tak naprawdę nie jest rozmiar stosu bo na nic realnie nie wpływa. Tak że zwiększanie go ma taki skutek jak umieszczenie komentarza w kodzie. Co masz w Device Manager? i rozpoaczęciu debugowania Ale nie zatrzymujesz programu?
Co do stosu to nie jestem pewien. Wziąłem ten skrypt linkera: https://github.com/PaxInstruments/STM32C... Widzę tam tylko: _Min_Stack_Size = 0x400;; /* required amount of stack */ Czy rozmiar stosu jest jeszcze gdzieś indziej? Bo...
Program zawiesza się i już nie wiem, co z tym począć. Sprawdzić rozmiar stosu dla przerwań. NVIC_SetPriority(SysTick_IRQn,2); NVIC_EnableIRQ(SysTick_IRQn); Przerwania SysTick nie da się wyłączyć, więc "włączanie" go to nie jest dobry pomysł. Raczej podobnie jest z priorytetem. 4\/3!!
Ten fragment kodu pisałem z pamięci i mogły być błędy, dlatego nadmieniłem, żeby potraktować to jako pseudokod, gdyż chciałem pokazać , o co mi chodzi. Przedstawioną metodę stosowałem do odczytu tablic zawierających dźwięki. Sprawdzę metodę przedstawioną przez JackaCz. Dodano po jakimś czasie: Mam tylko pytanie do metody JackaCz: po co definiujemy DataSize...
Nie mogę tego za nic namierzyć, wrzucam w różne miejsca kod od zapalenia diody abym wiedział która funkcja jest wywoływana w czasie zapytania o dane, ale nigdzie nic się nie dzieje... Data_setup() wykonuje się jedynie raz w czasie podłączenia urządzenia. Ale co z tego korzysta to nie mam pojęcia, przyjmuje wartość uint8_t RequestNo ale skąd ją bierze?...
Sprawa wielokrotnie poruszana. Jak zajrzysz do skryptu linkera, to znajdziesz tam takie coś: /* +=======================================... | stacks sizes +=======================================... */ /* Handler mode (core exceptions / interrupts) can use only main stack */ /*...
Rzeczywiście. Rozmiar stosu mam 1024 więc się przepełnia. Dzięki. Skoro stos ma rozmiar 1024B to pozostałymi 111kB SRAMu są nie używane? Co stoi na przeszkodzie na rozszerzeniu stosu na cały zakres pamięci? Nie ma innego sposobu niż globalna zmienna? Czasami potrzebuję zapisać dużo danych tylko w obrębie jednej funkcji. Natomiast Malloc wydaje mi się...
W zasadzie we wszystkich przykładach wykorzystania przerwania z UARTA nie było nigdzie czyszczenia flagi, więc założyłem, że jej nie potrzeba... gdzieś czytałem, że flaga jest automatycznie czyszczona, ale jestem laikiem więc mogę się mylić. Wdzięczny byłbym za wszelkie wskazówki jak do tego podejść. Zamiast zgadywać, zakładać i czekać na odpowiedzi...
Jak pisałem nie znam CooCox'a więc nie pomogę z jego konfiguracją. Czy wystarczy zmienić definicję STACK_SIZE? Jeśli tak to na jaką? Nie, jak sama nazwa wskazuje jest to rozmiar stosu, a nie jego położenie. Co do wektora przerwań w funkcji ... W aplikacji bootloadera nic nie zmieniasz w projekcie - skrypcie linkera. Przed wywołaniem głównej aplikacji...
Najprościej będzie chyba wziąć pliki z projektu dla LPC1114 i poprawić w nich stosowne rzeczy (rozmiary pamięci, ich adresy i rozmiary stosów w skrypcie linkera, przerwania w tablicy wektorów). Nie jest to dużo roboty, choć jest dosyć nudna.
Freddie Chopin napisał: A stos dla przerwań sobie ustawiłeś? Nie No to jeśli chcesz używać przerwań, to raczej dobrym pomysłem będzie ustawienie dla nich stosu o rozmiarze innym niż zero (; 4\/3!!
Jawne określenie rozmiaru stosu (stosów) zajmuje jakieś 3 sekundy, a dzięki temu zyskujesz świadomość jego rozmiaru i tego że kiedyś może się skończyć. Rozwiązanie typu "stos na końcu zajmuje sobie tyle miejsca ile jest" to taka wycieczka w ciemnościach. Przecież program skompiluje się bezproblemowo nawet jeśli nie będzie ani pół wolnego bajtu na stos...
Ja też zaniże poziom. Jaki jest najpepszy na świecie mikrokonroler pod wsekimi względami. Cud miód malina (at)ElektrodaBot Bezpośrednia odpowiedź na pytanie Nie istnieje uniwersalny, absolutnie „najlepszy” mikrokontroler pod każdym względem. Każda rodzina mikrokontrolerów ma swoje mocne i słabe strony, a wybór zależy od konkretnych wymagań projektu:...
Zacznij od ustawienia poprawnego rozmiaru dla stosu przerwań w skrypcie linkera, albo od wyłączenia używania dwóch stosów w startupie (choć wtedy też trzeba zmienić w skrypcie linkera rozmiar stosu).
http://obrazki.elektroda.pl/3353424200_1... Szanowni Forumowicze! Jest to mój debiut jeśli chodzi o publikowanie swoich konstrukcji. Zapraszam do dyskusji i konstruktywnej krytyki, która jest zawsze mile widziana i pozwoli na poprawienie ewentualnych błędów. Chciałbym Wam przedstawić urządzenie, które szumnie nazwałem GSM GPS tracker....
O rozmiar stosu, bo printf to lekko licząc zwykle sobie zajmuje z 750B. No i jeszcze dochodzi wyrównanie stosu do 8, co również może być czasem problemem przy printf(), choć tutaj akurat nie. Proponuję na początek zamiast printf() stosować iprintf(), bo raczej żadnych zmiennoprzecinkowych liczb nie będziesz używał w takim zastosowaniu. 4\/3!!
Gdy dodałem jako atrybut do funkcji "weak" żeby kompilator nie dodawał na wejciu odkładania na stos Atrybut "weak" służy do zupełnie czego innego. To o co Ci chodzi to atrybut "naked" - funkcja z tym atrybutem w zasadzie powinna zawierać tylko assemblera. Co do plików których używasz, to ja mogę polecić jak zwykle to samo, czyli mój szablon dla STM32F1...
uint8_t znak_table Niemniej jednak zauważ że te 3 tablice zajmują _NA_ _STOSIE_ ze 120 kB. Teraz zobacz jaki masz rozmiar stosu w skrypcie linkera. EDIT: albo i ze 3x tyle, bo wg kodu który wrzuciłeś kiedyś sama tablica z double będzie miała 0.5 MB. Na stosie. Który jest w wewnętrznym RAM. Który ma 320 kB.
Przegryzienie się przez ponad 1000 stronicowego manual'a i "ogarnięcie" procesora jest procesem dość długotrwałym i żmudnym, stąd też następuje próba przeskoczenia tematu za pomocą gotowych bibliotek. Nigdy jakoś nie miałem okazji "przegryzać się" przez ten 1000 stron Reference Manual. Od razu przechodzę do Register Descriptions, bo ile to razy można...
1. rozmiar stosu. 2. niewłaściwa nazwa przerwania 3 zła konfiguracja dostępu do flash. .......
http://obrazki.elektroda.pl/6945964700_1... Przedstawiamy robota klasy Line Follower o nazwie Impact. Jest to ulepszona wersja Moduł z czujnikami Jest to element najdalej wysunięty od środka obrotu. Moment bezwładności jest duży (masa pomnożona przez kwadrat odległości od środka obrotu), dlatego też aby móc wysunąć daleko czujniki,...
No i bez żadnych "Panów" mi tutaj! (; Kultura musi być. skonfigurować sobie rozmiar stosów A rozmiar stosu to zostawić taki jak tam jest czy może zwiększyć ?
Próbuję bawić się systemem FreeRTOS. Mam problem, gdy uruchomię tylko jedno zadanie led lub tx to wówczas one działają. Gdy próbuję uruchomić 2 zadania, nie działa nic. Próbowałem zmieniać rozmiar stosu, priorytety zadań i nic. [syntax=c]#include <stm32f4xx_usart.h> #include <misc.h> #include "stm32f401_discovery.h" #include "usart.h" #include...
Ok już nieco rozumiem ocb z tymi adresami. Nie wiem do końca jak to działa (jak przenoszone są dane) ale idąc dalej. Czy poprawnie zrobiłem własną sekcje? Umieściłem ją za sekcja stosu: Dodano po 16 Wydaje mi się że działa stworzyłem w pliku jedną zmienną: volatile uint32_t count_max __attribute__((section(".graf"))); Tylko nie wiem czemu w wyniku kompilacji...
rozmiar stosu stm32 rozmiar stosu cortex rozmiar stosu
pendrive odczyt linux zasilanie konwertera multiswitcha amplituner instrukcja
współczesne badziewie radmor5412 przestrojenie
Problemy z odpaleniem Suzuki Grand Vitara 1.9 DDiS Zmiana grafiki w systemie Opel Insignia DVD800