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ś...
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...
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...
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....
Chodzi mi jak na stm zaimplementowałeś/skad wziales funkcje malloc/free.
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ś...
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,...
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...
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....
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...
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...
A Twój post co dokładnie wnosi do dyskusji? Gdzie pamięć jest alokowana statycznie? W Twoich projektach, jak mniemam? Miło że napisałeś wcześniej na forum o tym że trzeba być świadomym takiego problemu! To że sobie można przerobić to na alokację statyczną to każdy wie, tylko już nie każdy wie, że dla kodu od ST sobie to trzeba koniecznie przerobić,...
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...
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...
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...
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ć...
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ę...
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...
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?...
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...
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...
A po co ta dynamiczna alokacja? W mikrokontrolerach zwykle jest to główne źródło błędów w programach, w których się jej używa. Każdy alokowany obszar - to strata zapewne 8 bajtów. Sensu nie widzę w tym żadnego - pamięci od tego nie przybędzie, a o błędy bardzo łatwo.
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...
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...
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ą...
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 pamięci dynamiczna alokacja alokacja dynamiczna
nagrzewnica suszarni projektor wentylator zmiana czasu letni zimowy
klawesyn przestrojenie pompa ciepła nulite instrukcja
Electrolux, AEG, Zanussi – błąd F101 piekarnik: blokada drzwi, czujnik, naprawa, reset Jak ustawić parametr P00 w piecu Termet Silver?