Chodzi mi jak na stm zaimplementowałeś/skad wziales funkcje malloc/free.
Tak więc. 1. skompilowałem program dla lm3s w "codesourcery lite" i błąd występuje nadal 2. uruchomiłem program na stm32f103, korzystając z twoich przykładów, i tutaj dynamiczna alokacja pamięci działa poprawnie. 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...
Funkcja taka powinna przyjmować wskaźnik na "const char*", skoro i tak go nie zmienia (wiem że go nie zmienia, bo jakby próbowała, to byś miał zwiechę przy stringach z flasha) i wtedy problemu nie ma. Taki dobry nawyk (; Jeśli "parametr wskaźnikowy" nie jest modyfikowany, to powinien być const i tyle. Kompilator czepia się całkiem słusznie, bo zakłada,...
0. Żeby wyszukiwało pliki w podfolderach trzeba je podać wprost w odpowiedniej linijce w Makefile. 1. Treść chyba mówi sama za siebie. 2. W przykładach plik ten jest lekko zmodyfikowany - z tego co pamiętam wystarczy wpisać "void" do pustego nawiasu i już. 3. Potrzebne Ci będą też syscalls, ewentualnie zmień używany tryb dynamicznej alokacji pamięci....
Kaj już kol (at)LChucki napisał - dynamiczna alokacja nie jest szczególnie dobrym pomysłem szczególnie jeżeli często alokujesz/zwalniasz. HardFault zostawia śladd na stosie i w rejestrach. Zobacz po prostu gdzie on wystąpił i co go spowodowało. https://mcuoneclipse.com/2012/11/24/debu... Albo zainstaluj sobie IDE, które...
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.
Aby ci to działało to MUSISZ zaimplementować swoje własne syscalls dla open, read, write, close itd. (nie wszystkie muszą działać prawidłowo, choć powinny). Pod tym linkiem który podałeś są przecież nawet podane funkcje (_read_r(), _write_r(), _open_r(), ...). Dodatkowo konieczna jest implementacja DZIAŁAJĄCEGO _sbrk_r(), ponieważ fopen() (a w zasadzie...
Musisz jednak być świadom co niesie za sobą przejście na C++. Wyjątki w c++ to duży nakład kodu (30kB lub nawet więcej) do tego dochodzi jeszcze RTTI, potrzeba implementacji alokacji pamięci itd, itp. Wszystko można włączyć/wyłączyć, jednak trzeba wiedzieć co i jak. Jeżeli masz do czynienia z opensource-em sprawa nie jest trywialna. Niekoniecznie....
Dzięki Freddie! Po odblokowaniu __USES_CXX i pobraniu syscalls kontenery działają jak należy. Mam jednak jeszcze jedno male pytanko: chcialem użyć standardowej kolejki FIFO (std::queue) do której w main-e wrzucam jakaś wartość natomiast w przerwaniu ta wartość odczytuje. W którymś ze swoich postów pisałeś ze dynamiczna alokacja pamięci w przerwaniach...
wystarczy poprawić funkcje free/malloc/alloc/realloc tak, aby zmieniały wartość zmiennej globalnej określającej wielkość wolnego obszaru sterty Myślę, że nie do końca. Każdy algorytm dynamicznej alokacji pamięci nie polegający na wykorzystaniu MMU będzie generował narzut na przestrzeni dostępnej rzeczywistej pamięci. Ciężko jest zgadnąć ten narzut...
O wskaźnikach kolega słyszał? Jak najbardziej słyszał i używał jednakże w tym przypadku wg. mnie wskaźnik będzie miał identyczne zastosowanie jak tablice. Potrzebny podwójny wskaźnik, który mógłby być zwracany z jakiejś funkcji, jednakże należy zauważyć, że wartości tablic są stałe, więc tworzenie wskaźnika, dynamiczna alokacja a następnie wypełnienie...
Coś naplątałeś... Aby uzywać malloca bez dziwnych errorów, musisz zadeklarować odpowiednią ilość miejsca na stertę . Co z tego, ze twoje zmienne zajmują niewiele ramu, skoro najpewniej ustawiles sobie parę kB sterty, i gdy przekroczysz te pare kB, program ci sie natychmiast wykrzaczy, bo oczywiście najpewniej nigdy nie sprawdzasz, czy malloc przypadkiem...
Poza stosem w SRAMie masz jeszcze przynajmniej: - stertę - dynamiczna alokacja (malloc, new) - sekcję data - wszelkie globalne i statyczne zmienne inicjowane jakąś wartością - sekcję bss - jw. ale zerowane przy starcie programu poza tym możesz sobie tworzyć własne sekcje, latać wskaźnikiem po pamięci i cokolwiek Ci przyjdzie do głowy. Alokowanie dużej...
Całość powinna dać się zrobić w parę dni - jak skończę to tutaj dodam pliki jakie powstaną. Co tam słychać w sprawie... ? :P Gdzieś już na forum pisałem - GUI z ST jest niespójne pkt XY(0,0) dla Recoucera i GLCD są w różnych miejscach, zamienione XY, błędy w alokacji pamięci, brak mechanizmu zdarzeń, brak dynamicznego tworzenia obiektów - skutkuje...
Bawię sie STM32F103ZET + zewnętrzny RAM i nie bardzo potrafię wyczarować działającą konfigurację tak, aby stos był w pamięci wewnętrznej, natomiast sterta w pamięci zewnętrznej i jednocześnie uzyskać działającą funkcję malloc na tejże stercie w pamięci zewnętrznej. O ile pomijajac malloc cel osiągnąłem, jednak szkoda 512KB ramu bez dobrodziejstw płynących...
Po prostu przejdź na C++ i już. Nie ma żadnych wad, a 99% tego co możesz przeczytać w necie to durne przesądy leśnych dziadków. Kod o tej samej funkcjonalności w C czy w C++ będzie działał identycznie w obydwóch przypadkach. Tyle że ten w C++ będzie krótszy, prostszy (powiedzmy że to kwestia subiektywna) i zapewne bardziej odporny na błędy. Ja też się...
Cze, Od jakiegoś czasu rozwijam swoją konstrukcję sterownika do stacji pogodowej. Projekt robi się coraz większy i większy i w końcu dotarłem do etapu, w ktorym rozważam użycie jakiegoś RTOSa. Mam dużą bibliotekę własnego kodu obejmującą takie rzeczy jak kompleksowa obsługa komunikacji po USART czy I2C, mam pełną obsługę konsoli tekstowej. Do tego używam...
Znowu małe pytanie... Działa Ci operator new, czy coś trzeba jeszcze dodać ? U mnie procesror wchodzi w HardFault_Handler jak próbuje go użyć : Hmm... W aplikacji testowej jest sporo alokacji dynamicznych w teście kolejek, choć są one jednowątkowe oraz dosyć zorganizowane (po kilku alokacjach jest zawsze dealokacja wszystkiego). Tak więc odpowiedzieć...
Kilka stert się przydaje w przypadku gdy wykorzystywane są jednocześnie: - duże bloki pamięci na konfiguracje, fifo/lifo raczej stałej lecz dynamicznej wielkości o elementach z stałym size; rzadko są malloc-owane i free-owane - średnie bloki pamięci na bufory tymczasowe; średnio często alokowane i zwalniane - małe bloki pamięci na obiekty roznego typu...
Nie patrzylem w ten przyklad, nie wiem po co tutaj sie okresla ten rozmiar i czy on jest maxymalny czy minimalny? Może się autor wypowie. W przykładach (w skrypcie linkera) ustawiany jest rozmiar maksymalny. Ułożenie w RAM jest następujące: data - bss - stos 1 - stos 2 - sterta. Co do sprzętowej kontroli, to jest kilka opcji, ale z każdą jest problem....
Widziałem na jednym z forów, że ktoś pokazywał, że kod wygenerowany w C++ nie musi być wcale większy niż w C - ale trzeba już nieźle wiedzieć "o co chodzi", żeby dobrze sobie taki kod zoptymalizować. Jak się ma szybkość wykonywania takiego kodu w stosunku do C? To są wszystko mity... Kod w C++ zajmuje tyle ile musi zajmować - ciężko oczekiwać, że możesz...
BlueDraco Nie mogę się z tym zgodzić. Jakoś w każdym szanującym się RTOS'ie jest dostępna dynamiczna alokacja pamięci. Oczywiście jest to często źródło problemów ale takie ale są sytuacje gdzie bez dynamicznej alokacji nie da się zbyt wiele zdziałać. W rzeczywistości w duzych projektach dzięki dynamicznej alokacji jest więcej dostępnej pamięci ;)....
Witajcie. Zacząłem jakieś 2 miesiące temu przygodę z ARMami na przykładzie STM32. Moim celem jest przygotowanie samochodowego odtwarzacza mp3 zastępującego zmieniarkę CD. Początek zabawy przeszedł dość gładko i po paru dniach już odtwarzałem muzykę z pendrive'a. Jednak odbywało się to w pętli, więc równoczesna aktualizacja wyświetlacza czy inne czynności...
Przy proggramowaniu niedużych mikrokontrolerów dynamiczna alokacja pamięci nie ma sensu. Więcej pamięci zmarnujesz w związku z alokacją, niż jej zaalokujesz, a ponadto: kto inny miałby korzystać z pamięci, której w danej chwili nie używa jeden proces i jaką masz pewność, że ten inny proces nie zechce zaalokować pamięci w tym samym czasie, co ten pierwszy?...
1. Czy ten syscall.c jest w ogóle teraz potrzebny nic z nim na razie nie robiłem. Teraz nie, ale przy używaniu pewnych funkcji (czasem jedynie "pośrednio" tzn. nawet nie wiesz kiedy zaczynają być potrzebne) linker zacznie się burzyć o brak funkcji typu _write_r, _sbrk_r, _exit, _isatty_r (ogólnie funkcji zdefiniowanych w tym pliku) - to znak że zaczynają...
Ja ze swojej strony polecam D ([url=https://dlang.org/]https://dlang.o... To taki C#, który kompiluje się do kodu natywnego, ma różne modele zarządzania pamięcią (statyczna, dynamiczna alokacja, garbage collector). Można by rzec, że to C++ na sterydach. Co więcej, można robić coś, co w Ruście jest trudne - mieszać ASM/C/C++/D w jednym projekcie. Kiedyś...
Owszem. Ale to makro jest definiowane co najmniej na dwa sposoby, np. w konkretnych aplikacjach przykładowych z STM. Czyli widać jasno że problem znany ludziom z STM i sami panują jakoś nad tym. Starasz się ich wybielić, co jest zupełnie niepotrzebnie, bo ich dokonania na przestrzeni lat pokazują, że o programowaniu zbyt wiele nie wiedzą. Przykładowo...
co muszę zrobić, żebym mógł tak go używać?;] czy można stworzyć po prostu strumień do którego wpisywałbym dane za pomocą fprintf jak to było np. w AVR-GCC? czyli np. fprintf(&LCD, "Hello World"); czy już tak łatwo to nie pójdzie?;P Jeśli mowa o printf() z newlib, to nie jest to aż takie proste... Musisz zaimplementować (poprawnie) syscalls odpowiedzialne...
ewentualnie sterty (tylko w C++??) Ze sterty korzystasz dynamicznie alokując pamięć, w C za pomocą malloc i temu podobnych. Zwalniasz za pomocą free. Wielkość zużywanej tam pamięci jesteś w stanie oszacować analizując program i wykonywane alokacje, ale trzeba pamiętać o możliwej fragmentacji takiej pamięci. Malloc musi zwrócić wskaźnik na początek...
Funkcje wirtualne nie zastępują wskaźników na funkcje - to są wskaźniki na funkcje, czyli technika programowania niekiedy konieczna, której jednak, o ile to możliwe, należy unikać. Oczywiście, czasem jest to rozwiązanie najlepsze, jednak używanie go, gdy nie jest konieczne - to marnowanie zasobów i czasu procesora. Jeśli chodzi o zastosowanie i funkcjonalność...
Najbezpieczniej jest mieć stos "na początku RAMu kropka". Nie "za zmiennymi", tylko na fizycznym początku pamięci, PRZED tymi zmiennymi. W CrossWorks jest właśnie inaczej - adres wierzchołka stosu jest za obszarem zmiennych. Większość procesorów w których SP jest dekrementowany przy odkładaniu danych stos ustawia się na końcu pamięci. Jest takie przysłowie...
dynamiczna alokacja alokacja dynamiczna stm32 pamięci
rozrząd carisma uszkodzone gniazdo słuchawek demontaż zamka
Maxcom MC 6800 – brak dźwięku dzwonka mimo wyświetlania połączenia Pioneer MVH-S320BT resetuje ustawienia po wyłączeniu auta – brak pamięci, podłączenie zasilania