Co do lock i unlock, to proponuję raczej sekcję krytyczną, chyba że alokujesz dynamicznie pamięci z kontekstu przerwania (to wtedy musi być blokada przerwań) lub nigdy nie wykorzystujesz selektywnego "zawieszania" tasków (wtedy może być suspend-all). U mnie wygląda to tak: [syntax=C]/// \brief malloc() lock function - enters critical section. void __malloc_lock(struct...
Nie ma jakiegoś uniwersalnego rozwiązania. Wiele kolejek to raczej trochę przekombinowane rozwiązanie, więc pewnie jakaś zmienna + mutex. A czy po zablokowaniu tego mutexa robić kopie czy ich nie robić, to już zależy od sytuacji (jak szybko musisz go zwolnić żeby reszta programu się nie przycięła nadmiernie). Ewentualnie jak masz bardzo dużo pamięci,...
Powinienies kompilowac tylko jeden plik z katalogu MemMang: - 1. Poll Manager - 2 Manager oparty na liscie dwukierunkowej - 3. Biblioteczny malloc - 4 Nie pamietam Dodatkowo zdefiniuj w Twojej aplikacji 2 funkcje: - void vApplicationTickHook(void) - void vApplicationStackOverflowHook(void)
Programy w Linuksie korzystaj z bibliotek zwanych POSIX. Nie ma szans, żeby skompilować taki program na stm32 wiec to nie jest kwestia toolchain, tylko środowiska. Albo, lepsza baza, np RPI albo sportować kod na jakiś OS, jak np. FreeRTOS, tyle że malloc będzie praktycznie nie dostępny a to może być poważny problem, czasami da się gdy nie jest on mocno...
(at)BlueDraco - to o czym piszesz rozwiązuje chyba zawieszanie schedulera na czas alokacji, tak jest napisana funkcja malloc dla FreeRTOS, że podczas alokowania scheduler jest nieaktywny, zadania się nie przełączają. Moje dotychczasowe alokacje są umieszczone zaraz na początku każdego z zadań i tylko tam, w pętlach poszczególnych zadań nie ma alokacji...
Jeśli w trakcie wykonywania tasku zostanie wywołana funkcja pvPortMalloc będąca odpowiednikiem zwykłego malloc to gdzie zostanie zarezerwowana pamięć? W pamięci przeznaczonej dla tasku zdefiniowanej przy okazji xTaskCreate, czy w pamięci dostępnej dla całego FreeRTOS zdefiniowanej w FreeRTOSConfig.h jako configTOTAL_HEAP_SIZE czy może całkiem poza FreeRTOS...
Potrzebuję w projekcie użyć dynamicznej alokacji pamięci, niestety malloc() zawsze zwraca mi NULL. 1. Proponuję nie używać malloc w projektach embedded. 2. Najprawdoposobniej sbrk jest tylko "kadłubkowa" dla zapernienia linkowania się kodu. Co zrobić: 1. Jeżeli się już uparłeś na "malloc" to proponował bym freeRTOS-a z jego implementacją heap4.c albo...
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...
Siedzę nad problemem już kilka dni i nie mogę sobie poradzić. Do tej pory program ładnie chodził. Kiedy wzbogaciłem go o funkcje malloc zaczęły się schody. Jeśli załaduje to co napisałem do pamięci wszystko ładnie przechodzi. Jeśli zresetuję urządzenie to w następnym przebiegu program się wywala na malloc. Jeśli wgram jeszcze raz ten sam obraz to znów...
Jeśli używasz stosunkowo "starego" newliba (starszy niż max kilka miesięcy, mogę dokładnie sprawdzić), to malloc() w wersji "nano" _NIE_ nadaje się do działania wielowątkowego choćbyś nie wiem co zrobił. W nowszych newlibach trzeba sobie przedefiniować dwie funkcje i dodać tam np. blokowanie mutexów. Inna opcja to przedefiniowanie malloc() i free()...
Czy oznacza to że wątki działając nie korzystają tak na prawdę ze stosu procesora, tylko sterty? Stosy wątków tworzone są w dynamicznie zaalokowanej pamięci - pochodzącej z malloc() czyli ze sterty. W uproszczeniu. 4\/3!!
Witaj! W porcie, który mam u siebie, managerem pamięci jest heap_3.c, który jest wrapperem na malloc i free, więc nie muszę definiować dodatkowej sterty FreeRTOSa. Pozdrawiam Krzysiek
strncpy... a wczesniej malloc i memset (zerami)... z tym ze ja tutaj uzywam akurat pvPortMalloc (funkcja z FreeRTOS-a) dlatego pisalem ze nie bede wklejac kodu bo dalej sa uzytek kolejki itp. z FreeRTOS-a...
PlatformIO wraz ze swoim toolchain wspiera RTOS-SDK dla ESP8266 w wersji 512k flash (jako ESP-01). Sądzę, że tak będzie łatwiej. Tutaj nie wiele to zmieni ;) bo będzie takie jak miałem :) czyli napisałem sobie klasę i się zdziwiłem po kompilacji że robią się problemy przy linkowaniu jak się doda libstdc++ gdzie pojawiają się konflikty. W zasadzie ze...
Witam! Ostatnio opanowywałem przerwania i komunikacje między nimi. Wszystko fajnie działa :) Teraz chciałem się nauczyć jak tworzyć dynamiczne tablice pod FreeRtosem. Próbował może ktoś tego i mógłby się podzielić? Ja tylko wiem że jest taka funkcja: void *pvPortMalloc( size_t xWantedSize ) ale czy mam jej urzywać tak jak funkcje malloc? Czy...
Jeszcze posprawdzam proponowane przez Ciebie zmiany. A masz skrypt do Atmeli ? Co do _sbrk to dziwne jest, bo ten sam kod (implementacja malloc() jest w pliku heap_2.c) działa na LPC2148 i na STM32, więc nie wiem dlaczego tu nie wstaje. RTOS na pewno używa wyjątku SWI.
To co sprawdza funkcja xPortGetFreeHeapSize() ? Czyli wcale nie jest tak, że nie znasz FreeRTOSa [; Tak czy siak funkcja ta nie zadziała zawsze i nie zawsze zwrócona wartość ma sens. Pierwszy problem jest dlatego, że dla heap_3 (czyli korzystania z normalnego malloc() i free() ) funkcja ta jest niezdefiniowana, drugi problem wynika z problemu fragmentacji,...
Na to pytanie ja Ci nie odpowiem, musisz zrobić pewne badanie: Ze statycznym buforem - bo alokacja pamięci wprowadza pewien narzut czasowy. To co musisz zrobić to tylko przydzielić do tego zadania pewien obszar pamięci na sztywno i poszczególne jego fragmenty opakowywać w strukturę. Tutaj pojawia się pytanie - co jeśli rozmiar bufora będzie zbyt mały...
Jeśli chcesz to zdebuggować, to możesz się "zaopatrzyć" w bleeding-edge-toolchain ( https://github.com/FreddieChopin/bleedin... ). Jest on kompilowany praktycznie tak samo jak toolchain ARMowy, z tym że biblioteki zawierają wszystkie symbole, a więc można je spokojnie debuggować i widzisz co się dzieje. Z Twojego opisu wynika, że problem...
A co Ty piszesz o swoim RTOSie? Przecież wielokrotnie już w tym wątku napisałem, że przesadne skupianie się na prędkości jest bezcelowe (; Moja uwaga odnosiła się tylko do tego, że rzekomo taka a nie inna architektura FreeRTOSa jest podyktowana jakimiś ograniczeniami zasobów. Po prostu takie myślenie jest błędne, bo FreeRTOS po prostu _jest_ wolny,...
Hmm... a jaki jest tytuł? Może jakiś link do opisu ? Można by rzec, że skoro nie wiesz o co chodzi, to nie możesz mi pomóc (; http://shop.freertos.org/FreeRTOS_Tutori... przecież wątki żyją cały czas, więc zmienne odłożone na stos także ("globalne w wątku"). Chyba, że MPU nie ma dostępu do stosu ?...
1. Wiemy podczas pisania programów na architekturę ARM programista decycyduje za pomocą skryptu linkera gdzie w pamięci leżą sekcje programu generowane przez kompilator. Najczęściej wygląda to w ten sposób: Nie do końca tak to wygląda dla ARM, choćby dlatego, że zwykle między flash a RAM jest spora "dziura", a więc między .rodata a .data na obrazku...
Kontynuuję prace nad wcześniej wspomnianą przeze mnie biblioteką. Chciałbym, aby sama biblioteka natywnie była thread safe, bez brania pod uwagę docelowego (RT)OSa. Nie mam najmniejszego pomysłu jak to porządnie zrealizować... tej stercie, wywołując ten Xmalloc, Xfree itp. Pozwoli to na stworzenie kilku niezależnych stert, co bardzo przydaje się w pewnych...
Używam ciągów, aby zobaczyć, co znajduje się w pliku bin: ftl_read [FTL_LEVEL_ERROR]:ftl_check_... logical_addr exceed MAX_logical_address_size (0x%x, 0x%x) [FTL_LEVEL_ERROR]:ftl_page_g... != 1!recycle page:%x, retry_count:%x, index:%x, read value:%x [FTL_LEVEL_ERROR]:[ftl...
Mam wrażenie, że im bardziej rosną w siłę i skomplikowanie mikrokontrolery, tym więcej się takich dziwnych błędów pojawia - więcej się w nich na raz dzieje. Dlatego trzeba pisać kod, który jest prosty, przejrzysty i bez żadnych magicznych-cudów, bo jak mawiali mądrzejsi: Premature optimization is the root of all evil I to się sprawdza żadnych błędów...
Tak więc - reasumując. Dodanie FreeRTOSa do projektu dla LPC1769 to następujące kroki: 1. Dorzucić do projektu jakiś podfolder a do niego pliki FreeRTOSa w standardowej strukturze. Pamiętać o wybraniu tylko jednego malloca, czyli jednego z plików heap_x.c (przez wywalenie pozostałych lub zmianę rozszerzenia). 2. Do Makefile'a dopisać trzy (słownie:...
-wyrzuciłem podmiany nazw wektorów przerwań i wpisałem właściwe w tablicy, w vectors.c wyrzuciłem funkcje ich obsługi z vectors.c i zadeklarowałem jako extern. Moim zdaniem zupełnie niepotrzebnie, bo: - podmiana jest "czystszym" rozwiązaniem niż edycja plików podstawowych, - w vectors.c nie ma obsługi, jest tylko uniwersalny "zastępowacz" jeśli nigdzie...
Mam rozumieć ze nie włączasz żadnych peryferii? i CONFIG_TICK_CLOCK 16000000 używasz tylko do SysTick. Czyli jak jestem w "main" wtedy wszystko sobie uruchamiam? (dla mnie to ma sens ale chce się upewnić ) 3x "tak". Na chwilę obecną żadne układy peryferyjne (poza SysTick) nie są przeze mnie "dotykane". W przyszłości pewnie się to nieco zmieni, ale...
Witam wszystkich :) Czytalem , szukalem ale nie znalazlem rozwiazania. Otoz, chce skompilowac freertosa i mam nastepujace bledy: C:\msys\1.0\home\yagarto\newlib-buil... undefined reference to `_fstat_r' RTOSDemoline 5912403913407503260 C:\msys\1.0\home\yagarto\newlib-buil...
Nie przesadzaj - już kiedyś przekompilowałem całe libstdc++ z wyłączonymi wyjątkami, więc da się - wtedy całą obsługę błędów (czyli brak pamięci) musisz sobie zrobić samemu. Taka paczka jest do ściągnięcia z mojej strony, ale w chwili obecnej bardziej w kategorii ciekawostek, bo to do CodeSourcery sprzed dwóch lat chyba, jak nie starszego. Ale coś tam...
Niedawno w ramach zabawy z wyświetlaczem LCD i AT91SAM7S256 napisałem mały programik który obraca sześcianem w przestrzeni 3d. Całość działa jako task w freeRTOS ale idee widać. Program ma mały błąd który objawia się tym że sześcian robi się coraz mniejszy. Jest on spowodwany błędem obliczeń zmiennoprzecinkowych i faktem że zamiast wykonywać przesuniecie...
https://obrazki.elektroda.pl/2375178000_... Dzisiaj tworzymy kolejny miniprojekt - tym razem będzie to dotykowy kontroler lampy RGB. Sam kontroler będzie bazować na płytce ESP32 + wyświetlacz dotykowy ESP32-2432S028R, natomiast sterować on będzie dowolnym urządzeniem Tasmota/OpenBeken poprzez interfejs HTTP Tasmoty. Komendy będą wysyłane...
Wszystko dziala jak nalezy i szybko smiga. Tylko że wyrównywanie bloków zwracanych przez malloc() nie ma żadnego sensu, ponieważ one już są wyrównane. Chyba że pvPortMalloc() jest równie durny jak większość kodu FreeRTOSa, to wtedy faktycznie trzeba...
Pamiętaj, że atrybutem aligned wyrównujesz najmłodszy adres stosu, a tobie zależy niejako na najstarszym, bo stos jest "descending". STACK_SIZE musi być podzielny przez 8, tak samo jak rozmia stosów dla wątków. No o tym też zapomniałem i nie wziąłem pod uwagę, ale to akurat było dobrze. Znalazłem jeszcze jeden błąd tego typu w mallocu FreeRTOSa. Malloc...
Witam. Platforma deweloperska: Ubuntu 11.04 (wersja i386, ale procesor amd64), Target: sam7xc256 Problem dotyczy kompilacji za pomocą Codesourcery. Projekt ma już kilka miesięcy i był rozwijany pod Yagarto, na Windows. Przyszedł jednak czas na zmiany (wyszło Ubuntu 11.04). Dla uściślenia dodam, że korzystam z FreeRTOSa. Projekt się kompiluje bez żadnych...
https://obrazki.elektroda.pl/6687336200_... Dzisiaj przedstawię najprostszą wersję DIY kamery internetowej opartej o płytkę M1S Dock. Pokażę jak można skompilować demo przesyłania obrazu JPG z kamery przez TCP do serwera w Pythonie oraz przeanalizuję jego działanie, ze szczególnym naciskiem na komunikację pomiędzy dwoma rdzeniami BL808....
Dzień dobry. Zwracam się z problemem zmiany kontekstu danych w freeRTOSie którego właściwie nie potrafię zdefiniować z nazwy, otóż : Mikrokontroler STM32F303 współpracuje z wyświetlaczem LCD ITM 400x160 - matryca 8000 bajtów (pamięć ekranu) zdefiniowana w pamięci RAM jest na bieżąco wysyłana do wyświetlacza w przerwaniu z priorytetem wyższym niż RTOS...
Korzystam z lwip oraz FreeRTOS na STM32F4, wykorzystuję socket API. Na moim urządzeniu działa serwer WWW, ono samo także komunikuje się z innymi serwerami, zarówno po UDP jak i TCP. Ostatnio zauważyłem dziwną rzecz: wyłączenie komputera na którym działa usługa TCP, do której co minutę na krótką chwilę łączy się moja płytka powoduje, że lwip przestaje...
Pozwalam sobie odgrzać temat, bo właśnie zrezygnowałem z realizacji pracy magisterskiej o podobnym temacie - tyle że z nieco innego powodu. Może komuś się przydadzą moje doświadczenia. Jeżeli chodzi o płytkę DISCOVERY, Ethernet i IP, to - owszem - są gotowe przykłady (myślę o tych udostępnianych przez ST) ale ja zabrałem się za ten temat z trochę innej...
Witam. Używam mikrokontrolera coldfire mcf52235 freescalea, pisząc w eclipse Codewarrior. Mam tam system operacyjny freeRTOS. Problem pojawia się gdy w uruchomionym już tasku wywołuję pvPortMalloc(jest to wrapper do funkcji malloc dostarczonej przez producenta - ale thread safe). Okazuje się że w kodzie malloc używany jest rejestr adresowy a5, ktory...
malloc stm32 malloc tablica freertos biblioteka
skrzynka bezpiecznik voyager zabezpieczenie spawarka sprężyna siłownika krups
Wybór grzejnika olejowego na prąd: marki i funkcje Naprawa pokrętła Thermomixa: czyszczenie i konserwacja