Lepiej wykorzystaj do tego celu pamiec programu , ewentualnie eeprom. Sposob deklaracji tablic dla winavr : dla eeprom : #include <avr/eeprom.h> #define EEPROM __attribute__ ((section (".eeprom"))) unsigned char temp [20] EEPROM ={1,2,3,4,}; dla pamieci programu : #include <avr/pgmspace.h> static unsigned char temp_1 [2] PROGMEM = {1,2,3,4};
wrzuc kod do flasha, przeciez te procki nie musza miec kodu w RAMie, zeby szybko dzialac. obecnie kod programu zajmuje ci ponad 28kB, wiec nie dziw sie, ze miejsca zaczyna brakowac na zmienne. w jakim srodowisku i z jakim kompilatorem pracujesz? widac z komunikatu, ze linker tego srodowiska w ogole nie wykorzystuje dodatkowych przestrzeni adresowych...
Witam, No trochę jaśniej jest. Ram który przeznaczyłeś na stos jest prawie całym obszarem RAMU mikrokontrolera. 0x1FE4 - wielkość twojego stosu (obliczone wierzchołek stosu(0x1FF0) - początek sterty(0xc). Stosu Ci zapewne nie zabraknie. np. wywołujesz w mainie moja_funkcja(int param1, int param2, char tab[20]) to musisz przy wywoływaniu z przekazaniem...
w PIC masz w pełni sprzętowy stos i nia ma do niego dostępu w sposób programowy. Ma stały rozmiar (oddzielna pamięć w procesorze), więc nie da sie go zmienić programowo. Nie znam microbasic'a, ale ten pewnie realizuje stos programowy, więc należałoby zasięgnąć porady dokumentacji tego programu, by się dowiedzieć, czy jest to możliwe.
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... ;).
A rozmiar stosu ustawiłeś?
Ustaw rozmiar stosu na przerwań - domyślnie w przykładzie jest 0, bo nie ma tam przerwań. 4\/3!!
Zmień rozmiar stosów i ramki
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
Nie ma takiej zależności. Rozmiar stosu jest zależny od ilości zmiennych automatycznych i "łańcucha wywołań". 4\/3!!
Czy jesteś pewien, że stos Ci się nie przepełnia? Kompilator przed tym nie ostrzega, bo nie zawsze można na poziomie kompilacji przewidzieć rozmiar stosu. Stos w AVRach wypełniany jest od końca pamięci SRAM, jak się stos spotka z danymi, no to koniec... Czy masz w programie sytuacje, że np. wywołujesz funkcję w innej funkcji, albo nawet głębiej? Albo...
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.
Ten drugi to stos przerwań (z których korzystasz) i powinieneś go ustawić na jakąś rozsądną wartość. Edit: Gdzieś w ustawieniach projektu powinieneś mieć możliwość ustawienia rozmiaru stosów. Jak odpalisz debugger to podejrzyj rejestry przechowujące MSP oraz PSP.
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).
Spróbuj ponownie, zwiększam rozmiar stosu
Witam, szukam porady, jak obliczyć ilość pamięci którą trzeba przeznaczyć dla stosu pojedynczego zadania w systemie czasu rzeczywistego FreeRTOS. Oczywiście zależy ona od konkretnego zadania, jednak nie wiem jak ją rozsądnie dobierać aby nie marnować pamięci oraz żeby nie było jej za mało. Pozdrawiam
Masz zapętlenie wywoływania podprogramów instrukcją GOSUB. każdy podprogram np: Wyswietlanie_alarmu_temp powinien być zakończony instrukcją RETURN. Jeśli tak nie masz to w nieskończoność wywołujesz kolejne podprogramy i po którymś cyklu kończy ci się rozmiar STOSU :( np HW_STACK. Dlatego program zaczyna wariować i gubić wartości zmiennych SOFT_STACK....
Witam pisze sobie program w C++ pod borlandem,wykorzystuje w nim operacje na tablicach typu int ktore maja 10.000 elementow. Lecz tak ze korzystam z list - ktore tez posiadaja w porywach 10 tys. elementow. W jednym jak i drogim przypadku pojawia mi sie komunikat : "project project1.exe raised exception class EStackOverflow with message 'Stack overflow'....
Ponieważ analyzePulseFromIR() jest teraz powiązane z przerwaniem to taki program musi być krótki i nie wolno w nim wykonywać żadnych podprogramów inaczej wyłożymy ESP - skończy nam się stos a jest go raptem 8192 Faktycznie, domyślny rozmiar stosu dla wątku, w którym wykonuje się loop() wynosi 8192 i wartość ta jest ustawiona przez stałą ARDUINO_LOOP_STACK_SIZE...
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...
Zgadzam się, powinno działać na wszystkich platformach. Jedyną kwestią związaną z platformą, o której mogę pomyśleć, jest rozmiar stosu, który może nie być taki sam, o ile pamiętam. (at)max4elektroda , przy okazji, widziałeś kompilację Simulatora? Jest teraz dostępny jako exe w wydaniach i można tam również testować wykresy.
Czy ktos wie jak w Visual C++ 6.0 zmienic rozmiar stosu? I czy wogole sie da? Pracuje nad duzym projektem i zaczynaja wyskakiwac okienka w rodzaju Stack Overflow.
[syntax=asm]00E51353 sub esp,0F0h [/syntax] Tutaj masz ustawiany rozmiar stosu na zmienne lokalne, dzieje się tak w każdej funkcji. Jest także ustawiana ramka stosu. Odnoszenie się do zmiennych odbywa się poprzez obliczanie ich pozycji względem wartości rejestru ebp. W linii (z włączonym "Show symbol names"): [syntax=asm]00E5136E mov dword ptr [i],2...
Nie znam mozliwości w tym zakresie Bascoma. Jedno jednak jest pewne. Każdy program tego typu może działać sekwencyjnie. Oznacza to, że wywoływanie kolejnych procedur w procedurze działać musi. Jest jednak tzw granica zagnieżdzeń. Może ona wynika z możliwości samego kompilatora (programu tłumaczącego - w tym wypadku Twoim nie sądzę aby tak było), albo...
Nie odpowiedziałem na Twój ostatni post, ponieważ nadal uważam, że transmisja BL602 MQTT co minutę jest podsłuchiwana. Podejrzewam, że prędzej czy później upadnie. Obecnie posiada następującą adnotację: https://obrazki.elektroda.pl/1271277500_... Nie jestem pewien, co jest nie tak, myślę, że przyczyną może być wiele problemów. Wielokrotnie...
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...
Profilaktycznie zwiększyłem rozmiary stosów do 4096B i zapomniałem sprawdzić ponownie zużycie RAMu. Jeśli nie używasz przerwań (a pewnie na razie nie używasz), to na prawdę rozmiar innych stosów niż user_system może być równy zero. Jeśli zaś używasz, to 4kB na stos przerwań również jest przesadą - przecież to zwykle jedna, krótka funkcja. Może w porywach...
Funkcji mqttConnect() nie używam w innym miejscu, tylko w funkcji poniżej. Na początek zwiększ rozmiar stosu dla tego zadania.
Chip ma tylko 128kb sram, i ten problem wyskakuje nawet bez mqtt. Kilka kb można zaoszczędzić (może?), jeśli zmniejszy się rozmiar stosu zadań wpa_supplicant z 10000 do około 6144, jak w esp-idf (nie wiem, czy nawet tyle zużywa). Binaria są już dostępne na githubie, zapraszam do testowania/poprawiania. Jak już pisałem na gh, nic nie działa. https://github.com/openshwprojects/OpenB...
Troszkę za dużym ogólnikiem rzuciłem... Tak, stos to HW Stack (sprzętowy) i Soft Stack (programowy). Należało by zwiększyć rozmiar stosu sprzętowego, bo używasz przerwania od Trmer1. Wywołanie obsługi przerwania powoduje zajęcie 32 bajtów stosu (czyli tyle, ile masz zadeklarowane), a nie tylko do tego jest on używany. Możesz ustawić np. dwukrotnie więcej....
Wygląda na to, że zmiana "krótkiej linii poleceń startowych" na wielowierszową powoduje awarię BL602 podczas uruchamiania, jeśli linia poleceń nie jest pusta; przywróciłem ją z powrotem do pojedynczej linii poleceń w BL602 na głównym. Podejrzewam rozmiar stosu, ale nie jestem jeszcze w stanie tego sprawdzić. Zaktualizowałem RTL PR z main: https://github.com/openshwprojects/OpenB...
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ś...
... 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.
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...
nie da sie wprost okreslic jaki rozmiar stosu bedzie potrzebny. mozna za to napisac sobie swego rodzaju funkcje kontrolujaca, ktora bedzie sprawdzala wartosc SP. najlepiej w postaci przerwania od timera. mozna tez recznie, w symulatorze lub debuggerze, podgladac wartosc rejestru SP. 4\/3!!
Kompilacja nie przechodzi, bo brakuje mu funkcji IrqInit(). Co ta funkcja robi, skąd ją wziąć, o co w niej chodzi itd. - nie mam pojęcia. W każdym razie, żeby przy tym pliku vectors.S Ci działało FIQ, to musisz go zmienić w linijce 131: .FIQ: .wordFIQ Musisz to zastąpić np.: .FIQ: .wordFIQ_Handler Czy tam generalnie nazwą funkcji która będzie...
Wyjasnijcie to wyrownanie do 8 Chodzi o to, żeby rozmiar stosu był podzielny przez 8 Nie rozmiar stosu tylko adres początku stosu.
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...
Witam, Ale czy dla tych mikroprocesorów można ustawiać rozmiar stosu? Pozd
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!!
1. Dlaczego chcesz tworzyć tablicę instancji klasy Item, skoro ta tablica na początku ma być pusta? 2. Tak na szybko: [syntax=c]... Item** tablicaStos; ... tablicaStos=new Item*[rozmiar]; ...[/syntax] Jeśli jednak chcesz zostać przy swojej wersji, to musisz mieć konstruktor bezargumentowy klasy Item. I wtedy: [syntax=c]... tablicaStos=new Item[rozmiar]; ...[/syntax]
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!!
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ć ?
Stawiam na zbyt mały rozmiar stosu dla poszczególnych wątków - w callback'ach używasz Serial.print(), a to zżera nieco pamięci. Proponuję zwiększyć rozmiar stosu do 4096 i sprawdzić. Ogólnie tendencja słuszna ;) Zainstaluj sobie Exception Stack Trace Decoder w Arduino IDE: https://github.com/me-no-dev/EspExceptio... Ten delay(500) pomiędzy utworzeniem...
Rozmiar stosu? 4\/3!!
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).
Czy na pewno wykonałeś pełny restart pomiędzy skryptami? Znajduję większość problemów w kompilacji Windows (symulator): [url=https://www.elektroda.com/rtvforum/... OpenBeken IoT device simulator - first early alpha version release for testing ale oczywiście jest to trochę inne niż działanie na MCU, więc używam również poziomów dziennika...
Rozmiar stosu? 4\/3!!
Rozmiar stosu dla przerwań? 4\/3!!
Nie no, jakiś limit jest np. rozmiar stosu ;)
Pewnie trzeba sprawdzić rozmiar stosu (; 4\/3!!
Może zacznij od zwiększenia rozmiaru stosu... 4\/3!!
Ok, dzięki wielkie, obie odpowiedzi w pełni rozwiały moje wątpliwości:). Mam jeszcze tylko jedno pytanie: jeżeli określamy rozmiar stosu dla zadania to musimy uwzględnić wszelkie funkcje wywoływane przez zadanie i ich lokalne zmienne (jeżeli dobrze rozumiem). A co w przypadku kiedy zadanie, lub funkcja przez nie wywoływana korzysta z globalnych danych....
Dziękuję. Jeśli masz trochę wolnego czasu, możesz po prostu spróbować uruchomić berry "Hello world" lub najprostszy dodatek do strony http Berry OBK. Tylko po to, by sprawdzić, czy działa na fizycznych urządzeniach. Integracja jest wciąż ulepszana i nadal spodziewam się pewnych problemów z rozmiarem stosu. Przy okazji, dla każdego czytającego - jeśli...
Zwiększ rozmiar stosu w opcjach projektu :D
Jedyne co w kodzie który pokazałeś może być źle to zbyt mały rozmiar stosu, dla spokoju ducha możesz sobie pomnożyć rozmiar stosu dla tego taska który coś robi przez 4. Tryb SUPERVISOR jest lepszy, bo w tym trybie działa scheduler FreeRTOSa, niemniej jednak układ na pewno nie powinien się sam zatrzymywać. 4\/3!!
Tzn. co wpisujesz i ile tego jest? Jaki masz rozmiar stosu?
W takim razie jak na przykład zmienić rozmiar stosu dla FIQ?
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 4\/3!!
Ale w którym miejscu dokładnie się ustawia rozmiar stosu? w ld?
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...
To ma być menu, w którym są do wyboru jedynie 3 pozycje więc nie wiem czemu miało by to przekroczyć rozmiar stosu ?
Avr-dos zabiera 1kb sram na dzień dobry więc raczej do atmega16 się nie zmieścisz(chyba że przesiądziesz się na C).Jak masz podpiętą kartę do procka przez rezystory ( bo właśnie sam borykam się z tym problemem). $hwstack = 100 ' rozmiar stosu sprzętowego $swstack = 128 ' rozmiar stosu programowego $framesize = 100 Z tego co pamiętam minimalne powinny...
Sprawdziłem tuya W800, sdk jest raczej przestarzały, v1.00.01 Zaktualizowano OBK: https://github.com/NonPIayerCharacter/Op... Dodatkowe funkcje w800 są takie same jak w nowszym sdk, easyflash dla fv, berry, newlib gcc, heap_5, rozmiar stosu 100k. Ale wyłączyłem również wiele niepotrzebnych funkcji, takich jak hostif/rmms...
Spróbuj zwiększyć rozmiar stosu w Twoim startupie do np 1kb
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ś...
Po kliku próbach zmieniłem rozmiar stosu sprzętowego i programowego, a także rozmiar ramki i problem ustąpił. Tak więc zamykam temat. Pozdrawiam!
1. rozmiar stosu. 2. niewłaściwa nazwa przerwania 3 zła konfiguracja dostępu do flash. .......
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?
Zwiększyć rozmiar stosu. Być może dane są zapisywane do nieprawidłowego adresu. Może w cyklu niezainicjowanej zmiennej lokalnej.
Czy w skrypcie linkera (pochodzącym z odpowiedniego przykładu) ustawiłeś odpowiedni rozmiar stosu dla przerwań, z których zamierzasz korzystać?
Mam podobny problem i również z tym walczę na F107. Podpinam się :) Zmieniłeś rozmiar stosu main w skrypcie linkera od Freddiego ?
No jasne, że tak. Od razu zmieniłem rozmiar stosu. Niestety dalej miałem hardfault\system nie rozpoznał urządzenia. Próbowałem podmieniać jeszcze skrypty linkera na te od ST i nie podołałem. Zmiana rozmiaru stosu powinna wystarczyć? To jeszcze jutro popróbuję to ruszyć. EDIT: OK, jednak działa. Wiara w elektronikę przywrócona. Czy w eclipsie jest jakiś...
A w którym miejscu (co zostaje wysłane przez UART) się dokładnie wiesza? Próbowałeś zwiększyć rozmiar stosu (stosów)? 4\/3!!
W sumie to nigdy klas segmentu nie stosowałem, ale z tego co pamiętam jest to informacja dla linkera. Linker grupuje wszystkie segmenty należące do tej samej klasy, tak że nie są one porozwalane po całej pamięci, tylko są w jednym miejscu. Jeszcze co do use16, pisałem że określa rozmiar stosu, a chodziło mi o to, że określa rozmiar segmentu stosu, dokładnie...
Jakie to środowisko i kompilator? Ustawiles dobry rozmiar stosów? 4\/3!!
Ze skryptu linkera nic nie musisz usuwać - po prostu ustaw rozmiar stosu którego nie będziesz używać (process) na 0. __main_stack_size = 1024; __process_stack_size = 0;
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!!
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.
500ms dałem po to aby duży toroid mógł wystartować bez obciążenia. A jak można zwiększyć rozmiar stosu?
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ł.
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!!
Brakło RAMu pewnie, stos zaczął pokrywać się z obszarem przeznaczonym na zmienne. Albo przepełnienie stosu, jeżeli wywaliło podczas działania programu (na przykład w momencie wywołania jakiejś procedury). Jak to pierwsze, to spróbuj zmniejszyć rozmiar stosu (gdzieś tam w opcjach kompilatora jest), jak pierwsze lub drugie to postaraj się zmniejszyć ilość...
Nie znam się na bascomie ale moim zdaniem przepełnia Ci się stos. Możesz zmienić rozmiar stosu na mniejszy o połowę i zobaczyć czy szybciej Ci się zawiesi.
Nadal nie działa. Zmieniłem rozmiar stosu, symulator nie wskazuje problemów ale...stos zajmuje 54 bajty, zmienne kolejne 10-mam pełną pamięć ram. Najgorsze jest to, że pętla główna praktycznie nic nie robi. Sprawda tylko, czy dane zostały wysłane i wysyła procek do trybu powerdown (i to właśnie zajmuje 54 bajty:/ ). Co zrobić żeby bacom nie zajmował...
Problem rozwiązany, okazało się że domyślny rozmiar stosu w C18 (256) jest ciut za mały dla mojej konfiguracji, zwiększenie go dwukrotnie rozwiązało problem ze stabilnością.
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ę...
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!!
A w skrypcie linkera zmieniłeś rozmiar stosu dla przerwań na inny od zera? BTW przeróbka wektorów którą pokazałeś powyżej raczej jest zaprzepaszczeniem wygodnej idei... 4\/3!!
Dzięki, pomogło :) btw. w pliku m32def.inc znalazłem .equ RAMEND = 0x085f , to oznacza początek stosu, wielkość itp, i jak ustawiać (zmieniać rozmiar stosu)
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!!
To też jest dość subiektywne... Jeśli SP zmniejsza się w miarę odkładania danych na stos i jest on umieszczony na początku ramu, to jest większe prawdopodobieństwo że wejdzie na zmienne statyczne, które też są standardowo umieszczane na początku. Chyba, że ustawi się duży rozmiar stosu wtedy jest mniejsze ryzyko. Nie doczytałeś. Najbezpieczniej jest...
Np. o brak stosu - sprawdź rozmiar.
Nie, to różnica pomiędzy STACK_SIZE a sumą pozostałych stosów. Inaczej miałbyś stos o ujemnym rozmiarze. No jasne, pomyślałem inaczej niż napisałem. A przesunięcie stosu na koniec RAM, chciałem użyć w przypadku nie korzystania z malloca i sprintf Czy używacie jakiś sposobów, aby spawdzić, czy stos dla jakiegoś trybu procesora nie jest za duży/za mały?...
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.
No i nie zapomij jeszcze o zwiększeniu rozmiarów stosów: HWStack i FrameStack, SoftStack.
No i oczywiście jak zwykle mamy sobie zgadnąć jak konfigurujesz kolejkę, czy w ogóle działa FreeRTOS, jaki masz rozmiar stosów dla tasków i inne "nieistotne" szczegóły które łatwo wywróżyć... Idę odkurzyć kryształową kulę. 4\/3!!
Zobacz coś takiego: $regfile = "m328pdef.dat" 'definicja mikrokontrolera $crystal = 16000000 'częstotliwość taktowania mikrokontrolera $baud = 9600 'szybkość transmisji szeregowej $hwstack = 40 'rozmiar stosu sprzętowego $swstack = 40 'rozmiar stosu programowego $framesize = 40 'rozmiar ramki stosu 'Inicjalizacja portów wejściowych i wyjściowych...
Witam, Okazało się że rozmiar stosu jest w pliku cstartup. Było 2*8*4, zwiększyłem na 12*8*4 ale bez zmiał. Szukam jeszcze innych ustawień. Pozd
cortex rozmiar stosu rozmiar stosu stm32 stm32f4 rozmiar stosu
kondensator wyschnąć przygasa płomień odległość soczewka
tania dobra spawarka tania dobra spawarka
Citroen C3 błąd 1340 - przyczyny i rozwiązania Głowica do magnetofonu UNITRA MDS 432: Typy i zamienniki