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...
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)
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...
(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...
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,...
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
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...
a wczesniej malloc i memset (zerami) Można to zrobić za jednym zamachem calloc Można ;) albo pvPortCalloc ;) tak patrzyłem na fragmenty kodu który kiedyś pisałem i zapewne pozostałość pvPortMalloc i memset po jakiś eksperymentach ;) zresztą linijkę niżej znalazłem gorszego babola jaki zrobiłem ;) ale mniejsza z tym ;) Dlatego nie wklejam całego kodu...
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...
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...
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...
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()...
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...
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!!
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...
void *pvPortMalloc( size_t xWantedSize ) Korzystasz z niej dokładnie tak samo jak z funkcji malloc() z bibliotek standardowych czyli: int *dynamiczna_tablica =(int *) pvPortMalloc(20 *sizeof(int)); pvPortFree(dynamiczna_tablica); dynamiczna_tablica = 0; dynamiczna_tablica = (int *) pvPortMalloc(40...
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,...
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...
os_malloc/free/realloc powinny pozostać bez zmian. os_memmove/os_strcmp/os_strchr/os_str są używane tylko w http_client.c os_strcpy jest w BK hal, new_mqtt.c, logging.c, http_client.c i http_tcp_server.c os_memcpy w BK hal i http_client.c os_memset jest używany ... os_strlen w BK hal i http_client Być może domyślne funkcje są problematyczne na Beken...
sklonowane tutaj dla bezpieczeństwa https://github.com/divadiow/xr872_sdk Czy ktoś próbował zbudować z tego obraz hello world? Może wtedy moglibyśmy znaleźć offset flash w tym 1MB chipie, gdzie moglibyśmy flashować ten hello world... Dodano po 1 Kompilacja pod WSL dotychczasowe doświadczenia: 1. Pobrałem SDK stąd: https://launchpad.net/gcc-arm-embedded/4...
-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...
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 ?...
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,...
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...
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...
Hej, chciałem was poprosić o pomoc w postawieniu FreeRTOS na STM32F407 VG discovery Board. Przeczytałem kilkakrotnie tutorial na stronie http://imagizer.imageshack.us/v2/320x240... Następnie dodaje pliki RTOS'a zgodnie z instrukcją http://imagizer.imageshack.us/v2/320x240... W kolejnym kroku dodaje FreeRTOSConfig.h do katalogu...
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...
Witam Mam zamiar napisać w FreeRTOS przykładowy program obrazujący działanie systemu RTOS (rózne reakcje programu na jakies dane wejściowe). Uruchomiłem przykład Demo win32-minGW w eclipsie, lecz że jest on rozbudowany, w pliku main zacząłem od przykładu z zadaniami i kolejką. Na podstawie przykładu z filmiku: /* Standard includes. */ #include <stdio.h>...
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...
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...
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...
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:...
Witam, przejrzałem na forum podobne tematy, ale mimo wszystko nie umiem sobie poradzić z uruchomieniem zadania mającego na celu miganie diodą. FreeRTOSConfig.h - zapożyczony z przykładu z archiwum z FreeRTOS [syntax=c]#ifdef __ICCARM__ #include <stdint.h> extern uint32_t SystemCoreClock; #endif #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK...
https://obrazki.elektroda.pl/3748425200_... Przedstawię tutaj potężne lecz bardzo proste w użyciu narzędzie pomagające diagnozować wyjątki na ESP32 w PlatformIO. Normalnie w momencie napotkania wyjątku ESP wyświetla w konsoli jedynie mało mówiące nam wartości rejestrów i stos adresów, ale na szczęście pokazane tu rozwiązanie to zasadniczo...
Witam, próbuje uruchomic FreeRTOS 7.6.0 na LPC1768. Korzystam z CooCox`a. Dodałem do projektu plik FreeRTOSConfig.h, wybrałem stertę heap_2, port to oczywiście GCC->ARC_CM3. Podpiołem Handlery do przerwań. Plik FreeRTOSConf.h [syntax=c] #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H /* Here is a good place to include header files that are required...
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...
Witam, Kiedyś działało mi bez problemu jedno zadanie w freeRTOS, jednak teraz mam problem gdy próbuję utworzyć dwa zadania. Gdy debuguje program to zatrzymuje się na vTaskStartScheduler(); Co to może być ? Mój main to: [syntax=c] #include "stm32f4xx.h" #include "FreeRTOS.h" #include "task.h" #include "math.h" #include "stdio.h" #include "myusart.h"...
Witam, Na STM32F407VG Discovery zaimplementowałem sobie system freeRTOS. Do projektu systemu dołączyłem pliki z ARM_CM4F... Mam nadzieje że dobrze .... Stworzyłem jakiś proste zadania i teraz chce dojść co i jak z tymi czasami i częstotliwościami. Skoro mój STM może mieć max 168MHz to poprostu w pliku freeRTOSConfig.h wpisać tak: [syntax=c] extern uint32_t...
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...
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...
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...
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...
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...
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...
No i tak działa - sam RTOS Dodano po 35 następnie dodałem w mainie wywołanie: ETH_BSP_Config(); System działa - wykonuje się zadanie Task_Main, potem dodaje wywołanie: LwIP_Init(); i powtórka zadanie Task_Main nie wykonuje się. Z programem ląduję w : void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ while (1)...
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...
Witam, Od jakiegoś czasu męczę się z biblioteką stemWin i mam z nią problem. Kod mojego programu działał z freeRTOS i obsługą wyświetlacza z sterownikiem SSD1963 po FSMC. Gdzie drzewo projektu wyglądało: http://obrazki.elektroda.pl/5131657900_1... A kod to: http://obrazki.elektroda.pl/9563310500_1... Niby nie mam żadnych...
freertos malloc malloc stm32 malloc winavr
filtr bezpiecznik pralka resetować ustawić kanał livebox kabel
sygnał dźwiękowy kuchenka arduino zgrzewarka
Nagłe wyłączanie ProgTV2 z tunerem DVB-T2 Rebel KOM 1060 Instrukcja remontu suszarki Elmarc Ancona DMPA 10 H7