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... ;).
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
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
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!!
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ć ?
Freddie natomiast przeznacza na nią wszystko to co zostało niewykorzystane. Co oznacza możliwość wykorzystania w pełni ramu. Nie do końca (; Wszystko co zostało po zlinkowaniu sekcji .data, .bss i po uwzględnieniu zadeklarowanego rozmiaru stos ów .
Spróbuj zwiększyć rozmiar stosu w Twoim startupie do np 1kb
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 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...
Jeśli problem zaczął występować po włączeniu jakichkolwiek przerwań, to sprawdziłbym na samym początku rozmiary stosów.
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!!
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ś...
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!!
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.
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?
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.
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...
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.
W tym kawałku skryptu linkera masz rozmiar stosu dla przerwań ustawiony na 0, a przecież FreeRTOS je wykorzystuje. 4\/3!!
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!!
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!!
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 ...
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 :) Mam dwa pytanka związane z projektem przykładowym na STM32. Jestem początkujący w tematyce ARM-ów. Odpaliłem sobie projekt w eclipse. Wszystko działa ładnie, podpiąłem też bibliotekę od ST (swoją drogą nie za bardzo mi przypadła do gustu). Przechodząc do konkretów zacząłem się bawić przerwaniami i początkowo nie działało ale pogrzebałem trochę...
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ś...
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...
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...
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...
A rozmiar stosu ustawiłeś?
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!!
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...
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...
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...
Czy tylko to może kierować program akurat w te maliny ( default handler)? Oczywiście że nie tylko, jednak portal stackoverflow.com nie nazywa się tak przypadkowo (; Skoro przed chwilą miałeś problem, że stos masakruje Ci zmienne, to wydaje się całkiem logiczne, że teraz stos masakruje Ci coś innego - tyle że tym razem kończy się HardFaultem. Możesz...
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....
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>...
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",...
Dlaczego przechowuje tablice 15 elementową folderów: Na przyszłość. mam zamiar wyświetlać albo foldery albo pliki, albo pół na pół. No ale to chyba nie ma sensu - skoro masz 15 linii, to wystarczy Ci 15 elementów, a nie 2x15 <; A masz może jakiś pomysł co zrobiłem źle z przerwaniami? Z przerwaniami można wiele rzeczy zrobić źle - począwszy od "standardowych"...
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...
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...
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 */ /*...
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...
1. Dokonywałeś jakichś innych zmian w "plikach bazowych"? Jaki jest rozmiar drugiego stosu? 2. Jak wygląda Twój konfig dla OpenOCD (chyba że to standardowy plik stm32f1x.cfg)? 3. W jaki sposób programujesz układ? Piszesz że wgranie przez GDB nic nie daje, a jakbyś wgrał np. przez bootloader UART? 4\/3!!
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...
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...
1. rozmiar stosu. 2. niewłaściwa nazwa przerwania 3 zła konfiguracja dostępu do flash. .......
Darmowe wersje mają pewne ograniczenia co do rozmiaru kodu jednak na początek wystarczy. Do migania diodą wystarczy, ale uruchomienie stosu USB + jakieś pożyteczne działanie zazwyczaj wyczerpuje 32KiB i nagle trzeba szukać nowego narzędzia. Moim zdaniem CoIDE jest jeszcze lepsze od wymienionych wyżej, ponieważ nie ma żadnych ograniczeń wielkości kodu,...
Rozmiar stosu można przewidzieć maksymalnym zagnieżdżeniem, ale uwaga na rekurencje :P Co do sterty. Są momenty kiedy nie da się do końca przewidzieć rozmiaru. Np stos tcp/ip. Pakiety przychodzą prawie losowo, i one wymuszają zakładanie/zwalnianie buforów. Oczywiście się to da obejść. Ale gdyby to było łatwe i proste do przewidzenia/obliczenia na pewno...
jeśli chciałbym użyć pojedynczego stosu Proponuję po prostu w skrypcie linkera ustawić rozmiar odpowiedniego stosu (bodajże main), a drugi dać na zero, w startupie usunąć linijki które pokazałeś i nic więcej nie zmieniać. czy linker policzy sobie rozmiar sterty i wszystko zatrybi? Nie, rozmiar musi być jakoś podany, ale jest to kwestia kilku odejmowań....
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...
W nowszych wersjach przykładów wszystkie stosy były zerowane, a wiec po "dłuższym" czasie działania swojego programu możesz sobie podejrzeć pamięć i po prostu zobaczyć ile jest wciąż wyzerowane i zmniejszyć dany stos o tą wartość (zostawiając sobie jakiś tam margines bezpieczeństwa). Generalnie dla aplikacji rzadko potrzeba więcej niż 1kB, a dla przerwań...
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,...
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ń....
Co ciekawe - paczka została wysłana z Polski kawał czasu po tym jak zamawiałem na ali-e (nadawca to światprzesyłek czy jakoś podobnie - pisane jednym słowem). Znam sprawę. Firma z Nysy. Też tak dostałem kilka przesyłek i to właśnie zamawianych z darmowa wysyłką. Ciekawa była też etykieta pod spodem tej nalepionej w Polsce. Na moje nazwisko, poczta...
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...
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).
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...
... i zwiększ rozmiar stosu. Zwiększyłem rozmiar stosu w CubeMX przy generowaniu projektu z 0x400 do 0x800 i nic to nie dało.
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...
Z tym stosem to tez za bardzo nie wiem. W skrypcie linkera, który sobie pożyczyłem z TrueStudio nie było nigdzie rozmiaru stosu. Trochę przerobiłem skrypt ale nawet jak wpisze rozmiar stosu 0 to program się uruchamia. Tutaj fragment linkera: [syntax=text]/* Linker subscript for STM32F051 definitions with 64K Flash and 8K RAM Copyright RAISONANCE 2007...
(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...
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.
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...
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...
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ść...
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...
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!!
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...
Nie dam się sprowokować... ;) No, może trochę... Napiszę tylko, że spośród kilkudziesięciu projektów, które robiłem na Cortexy, tylko w jednym miałem potrzebę ręcznej zmiany domyślnej konfiguracji stosu, więc Twoja zabawa w kotka i myszkę, choć masz do niej dobrą podbudowę teoretyczną, w praktyce skutkuje głównie dydaktycznym utrudnianiem życia programiście....
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.
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...
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...
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...
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...
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).
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ę...
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...
Rozmiar stosu? 4\/3!!
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ć ?
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...
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...
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!!
Wystąpiła pewna nieścisłość w Twoim sformułowaniu.: To ja nawet nie wiedziałem że stosuję konwersję typów z C99:) Czym innym jest konwersja typów, a czym innym są same typy danych. W poście wyżej przyczepiłem się, że stosowałeś char i uint16_t zamiast uint8_t i uint16_t albo char i unsigned short int . Chodziło mi bardziej o styl, bo stosowanie tych...
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...
Zaprogramowanie STM32, jeśli chce się wykorzystać jego możliwości (w tym ADC), jest znacznie bardziej złożone (tam jest kwestia skonfigurowania sygnałów zegarowych, STM32 ma wiele różnych, ze złożonymi powiązaniami, i np. nie można jednocześnie mieć maksymalnej szybkości ADC i łączności poprzez USB, bo wychodzi konflikt sygnałów zegarowych). Co do telefonu:...
Po pierwsze ta linijka jest bardzo ciekawa: DISCARD : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } Ja bym to wywalił od razu, bo to wcale nie usuwa informacji debugowania, tylko CAŁOŚĆ kodu biblioteki, który w tym momencie nie będzie zlinkowany - dzielenie, funkcje matematyczne, dowolne funkcje "standardowe" - aż dziwne że z czymś takim się to kompiluje....
Na pewno jest więcej literatury o 8051 i co z tego? Jak dla mnie bogata literatura to tylko problem, bo ileż książek można kupić i potem jeszcze przeczytać? Ważne są przejrzyste przykłady, na podstawie których można wiele zrobić. True, ale pytający pisał o książkach, więc poruszyłem tą kwestię. Dla mnie większość z tych książek to tłumaczenie manuali,...
lub pewnie ładniej by było: ładniej by było tak jak napisałem na początku - 3 definicje. I nic nie obchodzi Cię czy ma być naked, interrupt czy może obydwa (albo żaden). Każdy Task w FreeRtos ma swój stos, podaję go jak tworzę task, A skąd pewność, że rozmiary które podajesz nie są za małe? Sprawdzałeś? 4\/3!!
(at)PDT Moim nie są dobrym przykładem dobrze napisanego softu. I nie chodzi tutaj o rozmiar tego kodu czy o błędy w sofcie (bo każdy soft jest zabugowany mniej lub bardziej). Nawet nie chodzi mi o poziom abstrakcji tego kodu bo sam stosuje większą abstrakcję (np uniwersalny interfejs do IO, interfejs urządzenia blokowego etc). Po prostu sam styl w...
Właśnie z tego powodu poszukuję tej biblioteki. Pracuję nad projektem do którego chcę napisać dość skomplikowany program, ale µC, jaki wybrałem (konieczne małe rozmiary), ma (również mało) tylko 64kB pamięci. Jeśli potrafisz pisać skomplikowany program, to czemu chcesz korzystać z jakiejś, czyjejś biblioteki, zamiast napisać to tak jak trzeba,...
https://obrazki.elektroda.pl/1627311300_... Cześć Od dawna chciałem zrobić własny cyfrowy multi-efekt do gitary elektrycznej. Długo nie mogłem zabrać się za to z powodu różnych rzeczy no ale wreszcie jest. Mój projekt dotyczy tylko oprogramowania na gotową płytkę uruchomieniową STM32F746G-DISCO. Jest to raczej koncepcja/prototyp urządzenia...
rozmiar stosu cortex rozmiar stosu stm32f4 rozmiar stosu
radio kondensator trzeszcz uszkodzić roleta fronius licznik energii
piekarnik samsung piekarnik samsung schemat
Zasilacz komputerowy a zgrzewarka punktowa: czy to możliwe? Instrukcja obsługi Tevion MD 80857 - gdzie znaleźć?