Chcę używać dwóch rdzeni w ESP-32 i aby dwa rdzenie korzystały z tych samych zmiennych. Zastanawiam się tylko jak zrobić to, aby podczas zapisywania przez jeden rdzeń danych do zmiennej, drugi rdzeń nie zaczął ich odczytywać, bo mogą wyjść jakieś dziwne rzeczy. Czy jednak nie powinno być z tym problemu? Do tego celu używa się muteksów tzn. w celu synchronizacji...
1.Tworzysz Mutexa żeby tylko jeden task miał dostęp do interfejsu SPI I2C ... 2. Tworzysz semafor na dany interfejs. 3. Tworzysz driver do obsługi interfejsu, najlepiej z obsługa przerwań od tego interfejsu. 1. Blokujesz dostęp do interfejsu mutexem 2. Zlecasz driverowi co gdzie ma wysłać lub skąd odebrać. Driver w tym czasie blokuje semafor aż do wykonania...
Używanie muteksów we FreeRTOS jest mniej trudne niż uprawa pomidorów. Tutaj masz prosty przykład w środowisku Arduino: [url=https://github.com/ShawnHymel/intro... Muteks może "chronić" jedną lub więcej zmiennych/obiektów przed jednoczesnym dostępem z kilku...
Ok, problem rozwiązany. Powodem mojego błędu była oczywiście głupota. Przed uruchomieniem schedulger'a prubowałem zająć mutex.
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,...
Dziekuje wszystkim ... jednak najwazniejsze pytanie bylo pod kodem. W roznych przykladach widze deklaracje, zainicjowanie... ale ni diabla nie widze czy jest to wskaznik do jakiejs konkretnej danej uzytkownika... Np. mam jakas srukture "dana" 10cio bajtowa, ktora jest modyfikowana w 2uch funkcjach. Wiem ze musi byc to typ mutex. Jak sie deklaruje ta...
Tak, semafor został wzięty od razu po jego stworzeniu. [syntax=C] u32 sdmmc_init(void) { /..../ //w tym miejscu R/W karty powinien jusz dzialac wiec zrub test R/W karty mutex=xSemaphoreCreateMutex(); vSemaphoreCreateBinary(dmasem); xSemaphoreTake(dmasem,0); xSemaphoreTake(mutex,portMAX_DELAY); resp=testsdmmc(); xSemaphoreGive(mutex); if(resp==RESULT_OK)...
(at)Misztel_1 Wszystko fajnie tylko zapomniałeś o tym że poza zadeklarowaniem semafora trzeba go jeszcze zainicjalizować: xSemaphoreHandle xSemaphore = NULL; xSemaphoreCreateBinary(xSemaphore... if(xSemaphore != NULL){ //semafor binarny utworzony mozna dzialac dalej } lub xSemaphoreHandle xMutex = NULL; xMutex = xSemaphoreCreateMutex();...
Nawiązując do tego powyższego tematu (at)dondu, gdzie pojawiła się problematyka kończenia zadania poprzez wyjście z funkcji zadania... jestem ciekawy, czy istnieją jakieś implementacje RTOS-a, gdzie oprócz odpowiedniego API, wyjście z funkcji danego zadania/wątku (return, throw...) jest również "legalnym" sposobem zakończenia takowego zadania/wątku?...
Niestety kolejny problem mnie przerósł: próba zapisu do flash powoduje zadziałanie: [syntax=c]if (getCurrentThreadControlBlock().getStack... == false) FATAL_ERROR("Stack overflow detected!");[/syntax] przy następnym SysTicku po operacji zapisu. Załączam mój kod. Kompilator informuje że atrybut longcall jest ingnorowany - mam nadzieję...
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ę...
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...
zapewne tak: if (!flaga) yield() else { ... } 4\/3!! Nie, używałem zmiennej globalnej do której task 1 coś pisał, drugi ją czytał. Ale w momencie jak doszedł trzeci, także mogący te dane modyfikować, to odpuściłem sobie takie zabawy i zrobiłem to na zasadzie dwóch kolejek: task1 (pisze) -> task2 (czyta) albo jeśli jest potrzeba przetworzenia tych danych...
Jak koledzy rozwiązują tego rodzaju problem: przykład: Funkcja która obsługuje SPI na czas jej wykonywania jest chroniona mutex'em void AccessToSPI() { xSemaphoreTake( SPI_Mutex, portMAX_DELAY );/*--access to SPI resource is disabled--*/ .... *a .... xSemaphoreGive( SPI_Mutex );/*--access to SPI resource is ebabled again--*/...
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...
(at)ElektrodaBot Czy w zwykłych wątkach (poza ISR) można użyć vPortEnterCriticalSafe() oraz vPortExitCriticalSafe() zamiast stosowania operacji atomowych? Bezpośrednia odpowiedź W zadaniach (wątkach) FreeRTOS działających pod ESP-IDF można wywoływać `vPortEnterCriticalSafe()` / `vPortExitCriticalSafe()` zamiast używać `std::atomic`, ale należy traktować...
Zasada ma być lekko inna. Wątki mają do "czegoś" pisać a ten wątek Na upartego się da, tyle że: - dostęp do współdzielonego bufora tylko przy zablokowanym mutexie - mutex musi być zablokowany przez cały czas kiedy do bufora coś jest zapisywane _ORAZ_ przez cały czas gdy jest on odczytywany (a więc od początku transmisji DMA do jej zakończenia), - powiadomienie...
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...
https://obrazki.elektroda.pl/8064219100_... Witajcie, dzisiaj przedstawię jak okiełznać kolejny chiński mikrokontroler WiFi+Bluetooth, a dokładniej W800-C400 od WinnerMicro. Na ten moment można go kupić za około 10 zł, z kolei płytkę startową z nim już za 25 zł i obie te ceny uwzględniają już przesyłkę. Oczywiście nie będę tu korzystać...
brak ochrony ESD styków karty sim (rezystorów i TVS'a), nie wiem jak na USB, bo widać obok jakieś elementy co TVS'ami mogły by być Nie ma. SIM900 ma logikę zasilaną napięciem 2.8. Wy pchacie mu 3.5V na wejścia. Przekracza to o 0.5V max napięcie na wejściach wg DS. Nie wpływa to na działanie SIM900. Jak projektowałem PCB pod SIM900, to licząc impedancję...
Tomasz. Moglibyśmy w sumie na gg, ale to tak dla potomnych i zainteresowanych tematem. Otórz, po to wyświetlacz korzysta z interface FMSC, żeby nie wachlowac ręcznie bitami RD, WR, RS, CS i żeby timing był kontrolowany przez procesor, a nie software. Nawet się nie zastanawiam co ta funkcja robi, bo "z definicji" jest zła :) Może ma tą zaletę, że działa,...
Ad.1 Takie życie... Ad.2 NIc sie nie stanie, tylko program moze róznie działać w zalezności jak sie zsynchronizują wątki tzn raz będzie działał a raz nie. Ad.3 Musisz dopisac mutexy, a nie dopisali tego autorzy ponieważ są to źródła FreeRTOSa, a to co jest dołaczone jest napisane tylko na potrzeby dem załączonych do tych źródeł i najwyraźniej tam nie...
Cześć, Platforma: STM32F769I-DISCO OS: FreeRTOS Środowisko: System Workbench for STM32 Próbuję zaimplementować PTP na podanej platformie, jednak od dłuższego czasu męczę się z regularnie pojawiającym się Hard Faultem. Jak zdołałem wybadać, błąd pojawia się prawdopodobnie, gdy upłynie czas jednego z timerów programowych, które są tworzone. Tworzonych...
Przed inicjalizacją tasków inicjalizuje semafory :[syntax=cpp]vSemaphoreCreateBinary( xSemaphore_US3_O ); xSemaphoreTake( xSemaphore_US3_O, 0); xSemaphoreMutexRS485 = xSemaphoreCreateMutex();[/syntax] W/g tego co piszesz to po utworzeniu semafora binarnego muszę go pobrać ale w przypadku mutexa rozumie, że już go nie pobieram ?
Jak w xQueueSend ustawisz xTicksToWait na 0 oznacza to tylko, że funkcja nie będzie blokowała tego zadania. W twoim przypadku funkcja xQueueSend może zwrócić pdFALSE w przypadku jak kolejka będzie zapełniona. Jak dasz xTicksToWait portMAX_DELAY to masz pewność że się wyśle. Oczywiście nie będziesz miał tego problemu gdy zadanie od LCD będzie miało wyższy...
No tu akurat bym się ne zgodził. To co w man powinno tylko zapewniać inicjalizacje i to co tam programista chce przed uruchomieniem systemu, a następnie jako zbędna, jej zasoby zwolnione i zwrócone. Inaczej jest to tylko marnowanie zasobów. O ile w uK, które mają FLASH ie jest to problem, ale takie, które ładują do RAM i dopiero wykonują trzymanie...
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()...
Nie wiem co to app_main , ale jeżeli to coś co wolasz z main po uruchomieniu schedulara - to jest to źle. Po starcie schedulera w min nie powinno jeż być nic bo ten kod nie powinien się wykonywać. Kolejna wypowiedź w stylu "nie znam się, ale się wypowiem". Proszę zapoznać się z dokumentacją ESP-IDF, gdzie jest opisane jak wygląda konstrukcja app_main....
Dane przesyłane do tej kolejki są z funkcji TickHook, a wygląda to tak: [syntax=c]char *pcMessage = "Status: PASS"; xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR( xLCDQueue, &pcMessage, &xHigherPriorityTaskWoken );[/syntax] Funkcja TickHook jest wykonywana z każdego przerwania systemowego, natomiast dane przesyłane kolejka są raz na określona...
"Tick frequency" dotyczy jedynie przełączania zdarzeń o tym samym priorytecie które są w stanie "gotowe" (czyli w zasadzie chodzi o "round-robin scheduling"). Wszelkie* operacje na "synchronization primitives" (semafory, mutexy, kolejki, delay, sekcja krytyczna, ...) powodują natychmiastowe przełączenie kontekstu (jeśli jest ono oczywiście konieczne)....
Problemy biorą się stąd, że mało kto tak naprawdę wie jak przebiega cały proces kompilacji. Albo często po prostu wystarczy użyć googli, w końcu nie każdy musi to wiedzieć. Bo problemem widzę jest dodanie ścieżki wyszukiwania nagłówków, skompilowanych plików etc. Przecież jest makefile, z ładnym miejscem do wypełnienia na te ścieżki. Zajrzenie w skrypt...
Sorry, wydawało mi się, że będzie czytelniej. [syntax=c]/* USER CODE BEGIN Header */ /** ****************************************... * (at)file : main.c * (at)brief : Main program body ****************************************... * (at)attention * * <h2>© Copyright (c) 2020...
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...
Poczytaj sobie o Czy jednoczesne działanie przerwań i main mogę nazwać osobnymi wątkami programu? Nie bardzo. Wątki w systemie operacyjnym mogą zostać wywłaszczone (tak to się chyba nazywało) więc jest pewność że każdy z nic się wykona choć w części. A dwa wątki działają na systemie "równolegle" bo przydzielany jest im czas procesora na zmianę (trochę...
Pierwsze co przychodzi na myśl to wyłączyć wszystkie przerwania, tylko czy jest to sensowne , wg mnie nie. No to jaki wg Ciebie ma cel "sekcja krytyczna" jeśli nie wyłączenie WSZYSTKIEGO? I pytanie dla tych co walczyli już z FreeRTOS portENTER_CRITICAL( ); - czy w przypadku gdy drugi wątek chce wejść do tej samej sekcji - co się dzieje procedura zamraża...
Nie da się tego zrobić, Twój program jest po prostu źle zaprojektowany. Aby dane były prywatne dla wątków muszą być albo na stosie, albo globalne i w takiej ilości jak ilość wątków, a każdy wątek dostaje wskaźnik do "swojego" kawałka (nie wie nic o pozostałych). Arbitraż o którym piszesz to zadanie dla Twojego programu, a nie FreeRTOSa. Jeśli interesuje...
Witam, Jak mają się w tej kwestii wynalazki wielowątkowe typu FreeRTOS itp. Najwygodniej użyć jakiś OS. Teraz każdą, nawet drobną-testową rzecz, wykonuje z użyciem OS'a (CoOS) - przynajmniej jeden wątek do interfejsu z użytkownikiem (LED/LCD/Przyciski), kolejny(-e) do funkcjonalności. Sensowne rozdzielenie aplikacji wpływa korzystnie na przejrzystość...
Nie przesadzajmy - nie jest to znowu taki wielki problem. Co do sterowników urządzeń, to przy prostym założeniu można sprawę zredukować do zwyczajnego kodu jaki każdy tworzy bez RTOSów - to założenie to "danego urządzenia używa tylko jeden wątek". To pozornie wielkie ograniczenie w większości wypadków jest całkowicie słuszne, bo np. jak by wyglądał...
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....
Podkreślam, że nigdy wcześniej się tym zagadnieniem nie zajmowałem, jest to dla mnie nowość, dlatego jak coś napiszę źle albo nie do końca poprawnie to dajcie znać. Witam, mam następujący problem: Posiadam pewną aplikację, która niestety nie może być już modyfikowana, a nie spełnia wszystkich potrzebnych funkcjonalności. Dlatego też postanowiłem dorobić...
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...
Witam! Ostatnio zacząłem zajmować się RTOSami dla układów embedded, ogólnie tak dla rozwinięcia umiejętności bo na co dzień zajmuje się również systemami czasu rzeczywistego ale programuje je "bare matal". Czyli programowanie np. ARMa bez jakiegoś OSa. Ogólnie punktem zapalnym dla rozpoczęcia nauki była pewna dyskusja z osobą która na co dzień bawi...
mutex semafor freertos biblioteka freertos kolejka
głośnik bluetooth trzeszczy błąd klimatronika sterownik xenta
podłączenie manometrów klimatyzator podłączenie manometrów klimatyzator
Przegrzewanie akumulatorów w słuchawkach Philips TAH6005BK/10 Schemat elektryczny Etesia MVEHH 2004 - gdzie znaleźć?