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...
Chodzi o to, że mutex i semafor służą zasadniczo do czegoś zupełnie innego (choć jakby się uprzeć, to semafora można używać też w miejsce mutexa, ale licząc się z różnymi poważnymi problemami typu inwersja priorytetów). Dobrze by było więc sprecyzować o który dokładnie aspekt Ci chodzi, bo czym innym jest synchronizacja rozumiana jako "powiadomienie"...
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...
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...
Z procesami to można cały wykład zrobić. Proponuje poczytać man: wait, signal, fork, waitpid Ubijanie procesów zależy od stanu w jakim się znajdują. Ja sam tego już nie pamiętam. A kilku rzeczy nawet nie wiem ;) Nie ma nic prostszego niz semfory? Jest też coś takiego jak mutex. Ale czy prostsze to już kwestia względna raczej, zależy od sposobu w jaki...
(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?...
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...
Nie wiem czy piszesz do mnie czy to tmf'a (bo to jego cytujesz). Poświęciłem sporo czasu, przeczytałem głęboko atomic.h z wielu platform (ten plik przynajmniej istnieje dla AVR). Napisze już trzeci raz stdatomic.h teraz uwaga bo będzie słowo kluczowe: ISTNIEJE dla AVR. Masz po prostu przedpotowego toolchaina i wprawadzasz ludzi w błąd. Podkreślę z uporem...
Coś takiego nie jest możliwe i chyba nigdy nie widziałem kolejki która by coś takiego implementowała... Problem który chcesz rozwiązać kolejką należy raczej rozwiązać inaczej. Przypuszczam, że przykład jaki podałeś powyżej jest sporym uproszczeniem, więc to co napiszę dalej może zupełnie nie pasować do rzeczywistego problemu. Najprostsza opcja w powyższym...
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ę...
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)...
I to jest klasyczne odwracanie kota ogonem. To co napisałem to dwa zdania. Studia dają podstawę. Resztę da doświadczenie. I głownie z tego wynika różnica pomiędzy "junior", "senior" a "lead". Absolutnie nie jest. Nawet w USA coraz powszechniejsze stają się zamiast drogich studiów szkoły pomaturalne i kursy zawodowe. Niemcy od zawsze mieli gdzieś anglosaski...
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...
po prostu - masz thread, który pisze do SD. odbierasz ramke, który jezt zablokowany na kolejce, semaforze, mutexie czy tez notyfikacji. Przykład: Jak odbierzesz ramkę wstawiasz do kolejki dane (lub tylko referencję). Thread zapisujący na kartę się odblokowuje i zapisuje. Możesz miec (jezeli wstawiasz do kolejki same rwskażniki do buforów) dwa (lub węcej)...
To skorzystaj z mutexów, ten RTOS je ma? Albo blokuj przerwania na czas odczytu zmiennej zawierającej datę i czas. Czyli blokujesz przerwania, przepisujesz datę i czas do zmiennej tymczasowej na której dalej działasz, odblokowywujesz przerwania. takie rozwiązania to już mi kilka razy przeleciały przez głowę. Ja w zamyśle chcę maksymalnie wykorzystać...
Jakoś nie wydaje mi się, żebyś co 100 ms miał odświeżone wszystkie dane ze struktury zajmującej 80 kB. Po prostu to nie powinna być jedna struktura tylko wiele mniejszych. To że masz tylko jedną zmienną globalną naprawdę nie oznacza że to jest program lepszy od takiego który ma ich ze 100, ale każda po 4 bajty. Zgadza się, nie odświeżam całej struktury...
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...
Ostatnio trafiła mi się robota przepisania softu na pewien sprzęt... Poprzedni soft w oparciu o SPL zakatował biednego STM32F105 tak, że nie wyrabiał się z powierzonymi mu zadaniami: przepełniały mu sie kolejki, były zwiechy, częste restarty... Procek popędzony na 36MHz (czyli max dla HSI) pożerał baterię jak tylko mógł, żeby choć trochę postarać się...
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...
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...
Wyobrażam sobie to jakoś tak, że muszę stworzyć w DLL-ce jakąś "shared memory" i poprzez wzajemne wykluczanie (np poprzez semafory albo mutexy, albo cokolwiek jest dostępne - w Windowsie nigdy z tego nie korzystałem) przydzielać jednoznacznie dostęp raz tej raz tej aplikacji - czyli w zasadzie jakieś sekcje krytyczne stworzyć. Pomysł może i dobry,...
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,...
Rozumiem, ze jak mam 3 zadania/watki/taski, to bajer polega na tym, ze wszystkie zmienne uzyte w danym watku, sa zrzucane/zapamietane - kontekst. Dotyczy to tylko zmiennych automatycznych. Zmienne statyczne są "wspólne" (istnieje tylko jedna kopia, niezależnie od ilości wątków). A co jak sie zadeklaruje jakas tablice TAB Generalnie nie da się zadeklarować...
Zamiast lecieć w pętli wykorzystaj thread'y W pierwzym wpisz sobie obsługę RSa a w drugim obsługę pliku. Poczytaj o semaforach i mutexach do tego. A te krzaki świadczą raczej o braku kodowania spróbuj takiej sztuczki: [syntax=python] #dodaj to zaraz za myString = str(value) do_zapisu = bytes(myString + "\n", "UTF-8") #w b.write zrób tak: b.write(do_zapisu)...
Nie wiadomo, czy biblioteka stdio na Twoim, docelowym systemie została wybudowana jako thread-safe. A wołasz printf-a jednocześnie z kilku wątków. Poza tym: 1. pthread_mutex_unlock() w watek() powinien być pod if-em. 2. Co ma robić pętla while w main() to ja zupełnie nie rozumiem, zwłaszcza, że p jest na początku niezainicjalizowane. 3. Usunięcie mutex-a...
Trochę zagmatwanie opisane, ale z tego co rozumiem próbujesz manipulować zmienną jednego wątku z poziomu innego wątku. Z tego co pamiętam to tak się chyba nie da. Bo wątki nie mogą sobie wzajemnie mieszać w swoich zmiennych lokalnych. Wynika to z tego, że wątki są tak jakby osobnymi programami. Aby to obejść musisz stworzyć specjalną zmienną globalną,...
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 ?
Witam! Ostatnio napisałem program do pewnych symulacji fizycznych. Jak to bywa w tego typu programach, potrzebna jest duża moc obliczeniowa. Ponieważ dotychczas obliczeniami zajmował się jeden rdzeń procesora (posiadam dwurdzeniowy), postanowiłem sprawdzić jaki będzie wzrost wydajności, jeśli podzielę obliczenia na dwa równoległe wątki. Powiedzmy, że...
Nie wiem, jak konkretnie jest w Javie, ale pewnie trzeba użyć mutexu lub innej formy komunikacji międzyprocesowej (np. semafora). Pozdrawiam
jest wybrukowany tą praktyką co moje oczy boli gdyż z prostej obsługi kodów jedno-plikowych zaczyna tworzyć się wielokatalogowa sieć powiązań. Jeżeli celem jest pisanie prostych programów typu "zamigaj diodą" to stosowanie RTOSów nie ma sensu. A takie raczej są te programy "jednoplikowe" Jeżeli program jest bardziej skomplikowany, to warto mieć coś...
Następna sprawa, tak szumnie nazywanie normalnych flag synchronizacyjnych muteksami i semaforami. No przecież to się w "tradycyjnych" systemach rozwiązuje zwyczajną flagą (tudzież kilkoma flagami) synchronizacyjną. Jest to kompletna bzdura, ponieważ obiekty synchronizacyjne blokują wątek, a odczytywanie w kółko zmiennej "volatile bool" raczej niezbyt....
W jego źródłach są przykłady możesz tam zerknąć, najprostszy program to napisanie sobie "tasków" czyli wątków które będą się wykonywały, spięcie ich z RTOSem przez xTaskCreate() i uruchomienie sobie schedulera przez vTaskStartScheduler() filozofii nie ma :) Na samym początku tylko konfiguracja zdaje się być uciążliwa, ale jak ogarniesz co i jak to już...
To i ja może dorzucę coś od siebie. Preferuję kilka technik programowania jeżeli chodzi moje projekty: 1) Jeżeli kod programu będzie większy niż 128 KB i nie potrzebuję super low power to biorę RTOS. Dla dużych projektów RTOS sprawdza się idealnie. + łatwiej ogarnąć kod + duża część kodu jest już gotowa (kolejki, mutexy...) + można blokować na kolejkach...
Tak jak pisałem - procki łączysz synchronicznym USARTem, czyli masz RS232-TTL + sygnał zegara. DMA automatycznie przerzuca dane pomiędzy prockami przez ten interfejs. Po dwóch stronach deklarujesz po prostu tablicę, która ma być wspólna dla obu procków. Jeśli dane lecą tylko w jednym kierunku to sprawa jest prosta - zapisujesz tablicę i na koniec inicjujesz...
Kolega jest chyba wszechwiedzący, formułując stwierdzenie, że nie ma firm które nie używają RTOSa.. Napisałem, że prawie nie ma - nie licząc takich które pracują z bardzo małymi uK. W ciągu ostatnich powiedzmy 7 lat nie widziałem firmy, robiącej poważniejsze projekty bez jakiegoś RTOS-a - właśnie z przyczyn, które podałem. Jak ktoś pyta po co mu mutexy,...
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...
Nowa wersja 0.3.2 - dodałem semafory oraz mutexy. (ograniczenie max 120 wartości semafora) - możliwość 6 wątków. (ale przy dzielonym stosie sprzętowym, ilość skoków ograniczona) Program pictc troszke poprawiłem, generuje on plik "_listnamefun.txt" w którym są skoki i etykiety oraz wartości stosu. Docelowo posłużyć to ma do wyliczenia wielkości stosu...
https://obrazki.elektroda.pl/7849611700_... Firma Renesas, we współpracy z platformą Doulos zaprasza na internetowe seminarium poświęcone systemom czasu rzeczywistego (ang. Real-Time Operating System - RTOS), które są coraz popularniejsze w systemach wbudowanych. Wraz z popularyzacją większych, 32-bitowych mikrokontrolerów oraz zwiększającym...
... Ja bym dodał, że obie rzeczy (assembler, C) mają rację bytu, powinno się znać. Chcesz wycisnąć z małej niewinnej Attiny całą moc jaką fabryka dała, daj asm. Potrzebujesz skomplikowanych funkcji matematycznych, przenośności, szybko i przyjemnie coś napisać, fajne jest C. Interesują Cię RTOS'y, mutexy/semafory, może C++? No właśnie o tym cały czas...
woltomierz doszedł jeszcze jeden hehe teraz jest ich 5 :D wiem ze wydaje się to mega rozbudowane itp, ale prawdę mówiąc aż tak źle nie jest, np: jedna atmega16 odpowiada za wszystkie pomiary, napięcia, prądu oraz sprawdza czy przekaźniki nie są uszkodzone, czyli jak jakiś jest załączony to sprawdza czy faktycznie zasilanie jakie miał przepościć jest...
Z tego co piszecie, to widzę że i w RTOS'ach nie uniknę sprawdzania przeróżnych flag. Jak dobrze przemyślisz program, to tego sprawdzania flag jest mało. No i generalnie to nie jest sprawdzanie flag (zmiennych) tylko czekanie na semafory/mutexy/kolejki, bo jakbyś miał sprawdzać flagę (zmienną) którą ustawi inny wątek, to masz zablokowany system (;...
Tak jak w temacie, mam nadzieję, że coś pomoże. Komunikaty przekopiowane żywcem z forum sklepu PCProjekt. 0. 0x0000 Operacja zakończona pomyślnie. 1. 0x0001 Niewłaściwa funkcja. 2. 0x0002 System nie odnalazł określonego pliku. 3. 0x0003 System nie odnalazł określonej ścieżki. 4. 0x0004 Otwarcie pliku jest niemożliwe. 5. 0x0005 Brak dostępu. 6. 0x0006...
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...
W celu rozrywkowo-edukacyjnym piszę własny OS na mcu. Nie ma być to kolejny mcu-RTOS bo większość tych przeznaczonych na mcu jest nudne i nie mają np. separacji kernel-user, pamięci wirtualnej, ochrony zasobów, dynamicznego uruchamiania binariów, stronicowania, swapa i innych interesujących od strony dydaktycznej mnie rzeczy. Projekt oparłem o PIC32MZ...
https://obrazki.elektroda.pl/5371288300_... Witajcie moi drodzy. Przedstawię tutaj teorię i praktykę implementacji wsparcia protokołu TuyaMCU. TuyaMCU to protokół oparty o UART, służący do komunikacji modułu WiFi z głównym mikrokontrolerem urządzenia Tuya. Protokół ten wykorzystywany jest w wielu produktach IoT, m. in. w ściemniaczach,...
A proszę. Ale nie dwa, tylko 50, bo tak :P Większość pisana z pamięci, niekoniecznie musi się skompliwać, ale mniej więcej tak to MOŻE wyglądać, sposobów na komunikację jest całe mnóstwo. Za ewentualne błędy i niedomówienia odpowiada Albin Kolano. #include <windows.h> #include <process.h> LRESULT CALLBACK WindowProcedure(HWND, UINT,...
freertos mutex sterować semafor semafor procesor
pompa kulka lm350 ograniczenie prądowe punto przełącznik świateł
klucz udarowy elektryczny podłączenie zamel
Uszkodzenia skrzyni biegów Ursus 3724: przyczyny i objawy Problemy z sygnałem czujnika pochylenia Carraro