Tu masz przykład tego o co pytasz: http://www.freertos.org/tutorial/solutio... Semafory to taka kolejka bez danych - służy właśnie do tego o czym mówisz. http://www.freertos.org/Inter-Task-Commu... Oczekiwanie na kolejkę/semafor może mieć timeout. 4\/3!!
to zrób globalne consty
Co do działania samego kodu, to nie ma problemów zadnych, jedynym jest fakt jednokrotnego wykonywania zadania bez ustawionych semaforów Rozumiem to i dlatego wyjaśniłem dlaczego tak się dzieje. Semafor domyślnie jest zwolniony dlatego task za pierwszym razem się wykonuje (po jego zwolnieniu) a za drugim już nie (bo jest zajęty) i czeka na zwolnienie...
W kolejkę z freertos'a nie trzeba dodawać po znaku można wciskać ciąg znaków / typ złożony itd (nawet tak jest w przykładzie w manualu). Chociaż uświadomiłeś mi głupawość tego rozwiązania musiałby być jeszcze jeden wewnętrzny bufor do przepisywania wiadomości. Można, tyle że w kolejce i tak zapisujesz elementy o stałym rozmiarze. Dlatego normalna kolejka...
Najlepiej jakby każda wartość wkładana do kolejki była wskaźnikiem (albo strukturą, która ma wskaźnik etc.) na dane. Jest to chyba najwygodniejsze/najprostsze w obsłudze. Żeby nie alokować pamięci non-stop i wciąż można zaadoptować Twój pomysł. Tzn stworzyć bufor raz (nawet nie musi być w takim przypadku dynamiczny) i przekazywać do kolejki strukturę,...
Wg. opisu 3ci parametr xQueueReceive definiuje po ilu taktach (czyli ms) zadanie ma przechodzić w stan ZABLOKOWANE. Jest dokładnie odwrotnie - ten parametr to po prostu timeout - przez X ticków Twój task będzie zablokowany, jeśli nic nie ma w kolejce, a po tym czasie task zostanie wybudzony i uruchomiony. 4\/3!!
software timery są oparte o kolejki lepiej poznaj kolejki. Praktycznie wszystko w FreeRTOS oparte jest o kolejki :)
Wiem, że nie jest to najprostszy sposób przedstawienia problemu z funkcją vTaskDelayUntil(), ale w żadnym innym miejscu, w którym z niej korzystałem problemu nie było. w najbardziej trywialnej wersji: [syntax=c]void vfoo_Task(void * pvParameters){ portTickType xLastFlashTime; xLastFlashTime = xTaskGetTickCount(); for(;;){ Clr_BUZZER; vTaskDelayUntil(...
(at)Grzegorz Kostka -> Dobra, teraz znacznie lepiej, czyli taki mechanizm przesyłania działa następująco: xQueueSend wysyła adres do kolejki i jeśli jego parametr xTicksToWait == 0 oznacza, że automatycznie po wykonaniu tej funkcji zadanie o wyższym priorytecie (w tym przykładzie vTaskLCD) wywłaszczy zadanie vSenderLCD i opróżni kolejkę zwracając pdPASS...
Z drugiej strony, zwłaszcza na zagranicznych forach, pada wiele zarzutów pod adresem tego systemu. Pisze się, że jest nieefektywny, bardzo powolny i bardzo ubogi w funkcjonalności (że posiada niby głównie taski, kolejki, semafory a brak mu np timerów). Po takiej opinii możesz od razu ocenić jej poziom, bo: http://www.freertos.org/RTOS-software-ti...
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,...
OK pod FreeRTOS-em wszystko smiga jak ta lala ;) Kod przepisany z wykorzystaniem kolejek z FreeRTOS-a itd. Zamykam temat...
Magiczne słówko na "v..."? Generalnie idea którą przedstawiłeś jest kiepska z założenia. W typowym przypadku wątek powinien na "coś" czekać, a przerwanie powinno to "coś" "dawać". Przez "coś" należy rozumieć jakiś typowy obiekt synchronizacyjny (semafor, kolejka, flaga [nie mylić ze zmienną globalną], ...), a który dokładnie to już zależy od tego jaki...
Witam tak czy siak nie chodzi mi tutaj o pomiar czasu, miało to być tylko orientacyjnie. Pętli for użyłem tylko żeby zobaczyć orientacyjny czas... dla pętli for W FreeRtos kopiując "kolejkę" używają właśnie memcpy, myślałem żeby użyć tam DMA, ale teraz się zastanawiam (stąd ten post ) czy goście z CodeSourcery nie zrobili tego memcpy na DMA, bo czas...
1.tak, zmienne to oczywiscie volatile (w zasadzie tylko ) TxHasEND_UART2- oznaczająca koniec transmisji -reszta taka być nie musi. 2. V6.0.5. rzeczywiście troche stara .. 3.tak, działa to jakby był to zwykły pooling. Ta funkcja to rodzaj gatekeep'era (nie najwyższych lotów). ----- włóż wskaźnik na dane do kolejki rozumiem, że kolejka w takim przypadku...
W ten sposób dane są odbierane jednorazowo, niestety RTOS ich nie odświeża. Co to znaczy nie odświeża? Jezeli chcesz zeby ładnie w przegladarce ciągle się wyświetlało to musisz napisać trochę JS ajax-em słać do serwera ciągłe requesty. Inaczej to RTOS nic nie odświeży. Na wysłanie 1 bajtu kolejka to dość kosztowne rozwiązanie. Do tego ciągle wkładasz...
Nigdzie nie jest inicjalizowna kolejka xQueueMessage xMessage. [syntax=c] void EXTI9_5_IRQHandler(void) { xQueueMessage xMessage; long lHigherPriorityTaskWoken = pdFALSE; if( EXTI_GetITStatus( EXTI_Line5 != RESET ) ) { xMessage.cMessageID = PUSH_BUTTON_NEW_GAME; //xQueueSendFromISR( xKeyQueue, &xMessage, &lHigherPriorityTaskWoken); EXTI_ClearITPendingBit(...
To proponuję po kolei wszystko rozwiązać. 1. Załóż nowy temat 2. W temacie przedstaw MINIMALNY przykład przesyłania danych przez kolejki we FreeRTOS który nie działa Po rozwiązaniu tego problemu przejdź dalej. Co do LwIP, to ja proponuję po prostu wziąć jakiś przykład - tych ustawień jest tam MULTUM... 4\/3!!
Witam, chciałbym, żeby ktoś obeznany wyjaśnił mi dlaczego podane na poniższej stronie stwierdzenie jest poprawne: http://www.freertos.org/Embedded-RTOS-Bi... Think of a binary semaphore as a queue that can only hold one item. The queue can therefore only be empty or full (hence binary). Tasks and interrupts using the queue don't care...
Wszystko fajnie, pod warunkiem, że chce się używać STM32. Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę...
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...
hmmm chyba sie nie myle bo co to jest jak nie fragment parsowania linii NMEA: header[0] = header[1]; header[1] = header[2]; header[2] = znak; if ((header[0] == 'G') && (header[1] == 'G') && (header[2] == 'A')) { new_ggaHeader_flag = 1;...
(at)damiano713 FreeRTOS jest oparty o zmodyfikowaną licencję GPL. Nie obliguje ona do publikacji kodu źródłowego aplikacji. Więc śmiało można FreeRTOSa używać. Używam tego Atmothreads w jednym z projektów i działa to nawet nieźle ale według mnie ma kilka wad: - jest przeznaczony na mniejsze procesory AVR - nie ma takiego wsparcia jak FreeRTOS -> mniejsza...
Obsługa SPI tylko i wyłącznie w przerwaniu od SPI i tylko dla celów drivera do SPI, a reszta zadań na SPI do kolejki i realizowana poprzez driver SPI napisany pod kątem obsługi kolejki zadań na SPI.
Zastanawia mnie praktyczny brak pytań dotyczących RTOS-ów. Ciekawe dlaczego amatorzy praktycznie nie korzystają z tego niezwykle przydatnego oprogramowania. Myślę że stoi za tym wiele mitów o RTOS-ach a szczególnie: 1. RTOS zajmuje strasznie dużo zasobów i zjada mnóstwo taktów procesora RTOS tak naprawdę nie zjada żadnych taktów poza przełaczniem wątków...
Moim zdaniem wątku nie da się przerwać. Mogę się jednak mylić z tego powodu właśnie zadałem tu pytanie. Nie mylisz się. Micropython nie wspiera możliwości zatrzymania (terminowania) wątku, a gdyby była taka możliwość to skończyłoby się to uwaleniem całego programu. W ESP-IDF, na którym opiera się micopython nie ma też bezpośrednio możliwości zatrzymania...
Ile zasobów na co potrzeba, jak używać dobrodziejst RTOSa jak multitasking. Tak postawione pytanie jest tak ogólnikowe, że niezbyt wiem jak można na nie odpowiedzieć inaczej niż ogólnie znanymi informacjami. Z zasobów to potrzebny jest na pewno jeden timer, zwykle SysTick. Dodatkowo oczywiście pamięć (; Najlepiej więcej niż mniej. Są RTOSy których...
A nie jest to czasem SIM900/SIM300 - gdzie robisz to inaczej :) Przynajmniej ja robie inaczej tzn. podaje stan na PowerKey do czasu pojawienia sie informacji zwrotnej na pinie Status... wiec jakiejkolwiek petli nie mam :) Zobacz czy ten twoj modem nie jest czasem podobnie podlaczony do procesora... Ewentualnie mozna uzyc TaskDelay... ale nie musisz...
Koledzy jeszcze raz dziękuję za bardzo ciekawe materiały. Interesuje mnie jeszcze jedno: z praktycznego punktu widzenia jakie niebezpieczeństwa niesie za sobą: - stosowanie zmiennych globalnych do synchronizacji wątków zamiast semaforów (poza tym co napisał Freddie o zwalnianiu rdzenia przez wątek zablokowany semaforem) - bezpośrednie operowanie na...
Witam, zlęcę napisanie programu na Atmęgę - dowolną, który opraty byłby o system FreeRtos. Chodzi o użycie kolejek i semaforów, dla osoby znajacej temat 30 min roboty. Szczegóły na priv.
Więc proponuję Ci włączyć dane przerwanie dopiero po zarejestrowaniu semafora. Tak naprawde to powinieneś tak postępować z każdym mutexem,kolejką czy semaforem, niezależnie czy operują one w przerwaniu czy w tasku. Czyli najpierw tworzymy semafor, a potem uruchamiamy task, czy też włączamy dane przerwanie.
Moje pytanie dla upewnienia się. Rozumiem, że ustawiając priorytety przerwań od peryferiów należy stosować wartości z przedziału 5-15, mniejsze wartości zarezerwowane są dla systemu? Z grubsza tak. Dla przerwań możesz używać dowolnych priorytetów, ale te powyżej skonfigurowanej granicy NIE mogą używać funkcji FreeRTOSa (czyli semaforów, kolejek, ...)...
W zasadzie musisz zastanowić się jakie równoległe wątki mają być w systemie. Mogą się komunikować ze sobą tylko za pośrednictwem mechanizmów udostępnianych przez FreeRTOS (o ile dobrze pamiętam jest tam mechanizm kolejek). Do synchronizacji służą semafory. Jeśli potrzebujesz wiedzy o problemach związanych z synchronizacją zadań w OSie wielozadaniowym...
xSemafor jest wskaźnikiem na strukturę danych wykorzystywaną przez funkcje obsługi smafora i przez RTOSa. Sama funkcja xSemaphoreCreateMutex(); tworzy tą strukturę na stercie i "rejestruje" ją w RTOSie. Scheduler dzięki tej strukturze wie czy dany task ma być blokowany czy może przydzielić mu czas procesora. Semafory i mutexy w FreeRTOSie są protezą...
Witam, Coś takiego nie jest możliwe i chyba nigdy nie widziałem kolejki która by coś takiego implementowała... w freeRtos nazywa się xQueueOverwrite timeMessageQueue.tryPop(...); timeMessageQueue.push(...); Tak to właśnie zrobiłem na testy, z semaforami już kombinowałem. Właśnie patrzę na Twój przykład ConditionVariable... zaraz będę testował Pozdrawiam
Mam wielordzeniowy 32-bitowy mikrokontroler pod freeRTOS. Kiedy przekazywanie danych między taskami na różnych rdzeniach przez zmienną globalną jest złym rozwiązaniem? (Proces na rdzeniu I wpisuje do zmiennej. W momencie, gdy nie ukończył jeszcze wpisywania, proces na rdzeniu II odczytuje. Część odczytanych bitów jest nowa część stara. Kiedy może się...
Dzień Dobry Potrzebuję małej rady. Jestem w trakcie realizacji pewnego projektu i mogę użyć callbacków i algorytmu karuzelowego lub przeprowadzić eksperymenty z systemem czasu rzeczywistego. Tak czy siak muszę nabrać doświadczenia w tej dziedzinie. Z tego co wstępnie wiem to wystarczy do projektu dodać odpowiednie pliki ".c" i ".h.". Podobno mogę wtedy...
Witam W jaki sposób można odczytać dane przesyłane z PC poprzez USB? Korzystam z dema FREERTOS-a lwIP_Demo_Rowley_ARM7. Z tego co się zorientowałem, to są tam dwie kolejki: static xQueueHandle xRxCDC; static xQueueHandle xTxCDC; No i problem polega na tym, że jeśli użyję xQueueReceive (xRxCDC ... ) w jakimkolwiek uruchomionym tasku, to USB całkowicie...
No wtedy się nie da, tak jak napisałem. Tyle, że skoro dane są już w buforze, najprostszą optymalizacją jest nie kopiować ramek do buforów tymczasowych, tylko parsować fifo w locie, a payloadów też nie kopiować, tylko przetwarzać w locie. Ale oczywiście to juz zależy od implementacji, gdyż cm3 nie potrafi sprzętowo adresować %, więc dostęp do każdego...
(at)ElektrodaBot ...niezły bot! ;) Jakie są podstawowe różnice w funkcjonalności, budowie struktur runtime i komponentów między firmware OpenBeken i ESPHome? Wstępna ocena dostępnych informacji Chcesz porównać oprogramowanie układowe OpenBeken i ESPHome pod względem podstawowej funkcjonalności, struktur kompilacji, środowiska wykonawczego i obsługi...
Diodki świecą :) Dodatkowo udało mi się uruchomić wyświetlacz i zrobić prostą komunikacje wyświetlacza z diodką na bazie kolejki. Wszystko fajnie działa. Teraz chciałbym spróbować przerwań, tylko wyczytałem że tu trzeba trochę pokombinować...mógłby ktoś na jakimś prostym przykładzie zademonstrować jak we FreeRtos-ie działają przerwania? Może jakiś kawałek...
1. Jest sobie funkcja ustawiająca zegar mikrokontrolera (konfiguracja PLL). Chyba nikt nie zaprzeczy, że nie ma najmniejszej potrzeby robienia dla czegoś takiego wątku. No i ta funkcja zachowuje w statycznej zmiennej dla danego pliku (aby była fajna enkapsulacja itd.) osiągniętą częstotliwość rdzenia. Zmienna ta wykorzystywana jest potem w innych funkcjach...
Witam U mnie akurat to pomogło... ale cóż co projekt to inne problemy. Ja osobiście nie zrobił bym nigdy tak jak Ty czyli odbierać dane w przerwaniu i zapisywać je do globalnej zmiennej. Jak już muszę używać jakiś globalnych zmiennych to używam to zapisu i odczytu tych zmiennych funkcji. np readCos, i writeCos. Wiem że tylko ta funkcja może mi coś zmienić....
Dotyczy to tylko zmiennych automatycznych. Zmienne statyczne są "wspólne" (istnieje tylko jedna kopia, niezależnie od ilości wątków). Ok, czyli nie zuzyje tyle ramu, jesli bede uzywal zmiennych static. Tylko, ze musze wtedy byc czujny, bo jeden watek moze mi zepsuc inny (zmiennaą) ? A mialo byc tak, ze jeden watek nic nie wie o drugim. Nic nie wie,...
A jeżeli będzie "fail" to dalej ma się wykonywać subscribe? Raczej, nie. Dodano po 1 Zainstaluj sobie w końcu Exception Stack Trace Decoder: Dodano po 1 To może lepiej, że zamiast tworzyć kilka zadań o tym samym priorytecie, stworzyć jedno coś na zasadzie pętli loop i do sterowania fragmentami kodu użyć warunków if. Tak jak w moim przypadku obsługę...
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...
Witam, mam kilka pytań o pewne dolegliwości/ nieścisłości w moim rozumuwaniu dotyczących przede wszystkim używania sterty w RTOSach oraz unii i struktur. Pytanie nr.1 Kiedy najlepiej używać dynamicznej alokacji pamięci ze sterty, a kiedy statycznej deklaracji w danym zadaniu, jaka jest różnica pomiędzy tymi sposobami alokacji pamięci w FreeRTOS np....
Witam ponownie Troche czasu minelo i zdazylem bardziej doglebnie poznac ten zestaw ref. jak i sam procesor STM32. Niestety wraz z rozrastaniem sie projektu powracaja stare bledy i tak: W trybie SC USART nie generuje mi przerwan dla kazdego znaku, tzn.: Przy wysylaniu przez karte ATR w stanie RSTIN LOW moj soft dostaje tylko jeden bajt (pierwszy z ATR)...
https://obrazki.elektroda.pl/6052073200_... SiFive zaprezentowało nowy rdzeń IP oparty na RISC-V - U8, który jest mniej więcej równoważny rdzeniowy ARM Cortex-A72. W skład tej nowej rodziny wchodzą rdzenie takie jak energooszczędny U84, taktowany zegarem do 2,6 GHz oraz U87 - wyższej klasy rdzeń oferujący superskalarny potok poza kolejnością...
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>...
Zachciało mi się FreeRTOS i teraz mam z tym problemy ;) Piszę PORT do FreeMODBUS'a na STM32 działającego pod systemem FreeRTOS. Wszystkie płykłady jakie są nawet pod FreeRTOS'a działają na jego starszej wersji gdzie działają makra przełączania kontekstu: [syntax=c]portENTER_SWITCHING_ISR(); portEXIT_SWITCHING_ISR(); [/syntax] A w nowym FreeRTOS takich...
Witam 1.Czy używając semaforów lub kolejek w przerwaniach, minimalny czas odebrania takiego semafora, lub kolejki wynosi Tick, czyli 1 ms? Czyli w teorii max 1000 razy na sekundę..? 2. Jakie niebezpieczeństwo niesie za sobą obsługa całego przerwania w przerwaniu np od USB, nie używając semaforów lub kolejek. No bo działać to działa. 3. Co jeśli: -obsłużę...
Witam, Czy komus udalo sie uzywac w jakis bardziej zaawansowany sposob komunikacji FreeRTOSa z Winda przez wirtualny port COM przy pomocy przykladowego kodu lwip_demo_Rowley pod at91sam7s? Problem jest nastepujacy: - niektore terminale maja wogole problem z komunikacja przez wirtualny port (zawieszaja sie przy probie wyslania, "program nie odpowiada")....
freertos biblioteka freertos flash freertos rejestry
przebarwi kolor ustawienie anteny warszawa mikrofon czyszczenie telefonie
Pokrywa zaworów do Peugeot 3008 1.6 THP - numery części i zamienniki Pokrywa zaworów do silnika 1.6 THP EP6CDT - wybór i montaż