We FreeRTOS-ie nie wolno ot tak korzystać z przerwań. Popatrz sobie na przykłady. Jak nic nie wywnioskujesz to Ci podrzucę później kawałek mojego kodu. Poza tym nie wiem ile trwa wysyłanie poprzez USB ale nie ma sensu tego robić w przerwaniu.
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.
Witam W trybie FS możesz mieć mały problem z freeRTOS i USB jeśli chodzi o wysłanie danych z Stm32 do PC. W nim nie masz DMA i żeby wysłać dane musisz albo sprawdzać sam czy pierwsze 64 bajty zostały wysłane i potem wysłać następne (np co 1ms) lub zostawić jak masz zrobione w bibliotece od Stm, czyli oni włączają przerwanie Tx FIFO Empty Interrupt,...
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
Eee.. zmieniłeś w międzyczasie OSa? Wygląda trochę jakbyś strzelał na oślep, coś nie działa, to sruu wszystko, kopiuj/wklej inny przykład itp. Trochę jakby bez zastanowienia co konkretnie może nie działać... Dodano po 1 Kurka, to odpal sobie DMA, odblokuj przerwanie od Transfer Complete i jesteś pewny, że dane odebrano ;) Z przerwania wepchnij wynik...
NVIC_ClearPendingIRQ(USB_IRQn) nic nie da w tym przypadku. Należy wykasować flagi w rejestrze USB interrupt status register (USB_ISTR) , ale jeśli to zrobisz samodzielnie funkcja HAL_PCD_IRQHandler(&hpcd_USB_FS) może już nie działać właściwie ponieważ w zależności od stanu tych flag są podejmowane odpowiednie działania. Jak wskazuje sama nazwa tej...
http://obrazki.elektroda.pl/7258579400_1... Witam. Chciałem dzisiaj przedstawić kolejny projekt z cyklu "inni mają - mam i ja" ;) Tym razem jest to miniaturowy sterownik ethernetowy - " uWebServer ". Układ zbudowany został w oparciu o mikrokontroler Cortex-M3 - STM32F103C8T6, do tego kontroler ethernetu "znany i lubiany" - ENC28J60. Całość...
https://obrazki.elektroda.pl/4509007500_... Zapraszam na prezentację https://obrazki.elektroda.pl/1519670000_... Przygodę z APM32F003F6 pozwoli nam szybko rozpocząć płytka Mini Board. Oprócz głównego MCU z przydatnymi do uruchomienia elementami takimi jak rezonator kwarcowy, przycisk RESET oraz testowy, diody LED,...
Pierwsza sprawa: void ToggleLedTask(void *pvParameters) { while(1) { xSemaphoreTake(xSemafor, portMAX_DELAY); vParTestToggleLED( 0 ); } } Powinno raczej wyglądać: void ToggleLedTask(void *pvParameters) { while(1) { if(xSemaphoreTake(xSemafor, portMAX_DELAY) ==...
Tj ja ogólnie planuję zrobić szaloną rzecz. Bo mam program, który śmiga z FreeRTOS'em i do tego chce dołożyć przerwanie - nieFreeRTOS'owe, które ma priorytet wyższy niż FreeRTOS i jak ono wchodzi zatrzymuje się FreeRTOS i robi się kod przerwania, zauważyłem, ze FreeRTOS jest podpięty pod timer3, dlatego moje przerwanie ma być na timerze 1. Mam sobie...
Nigdy nie używałem debug_printf i w ogóle raczej mało debuguje w ten sposób ale FreeRTOS przejmuje systemowe przerwanie w SAM7X coby wykryć przerwanie od PITa. Poza tym jeżeli debug_printf w ogóle korzysta z przerwań to nie będzie działać bo we FreeRTOS przerwania muszą być odpowiednio "spreparowane". Popatrz sobie na przykładowe przerwania od UARTa.
Freddie ma racje. FreeRTOS pamięta kontekst zadań, za chwile nastepuje przerwanie systemowe i wraca do innego tasku. Program nadal działa, tylko już nikt nie wie jak... Na prawdę nikt nie miał takiego problemu?
Nowsze atmegi mogą bo mają przerwania od WD, starsze startują od resetu, ale pamięć nie jest kasowana, Ale ten start "chwilę" trwa. więc wystarczy sprawdzić określony obszar czy są jakieś dane, sumę kontrolną i pokierować dalszym startem. Ale nadal nie wiem jak task oddaje czas innym gdy nie ma nic do roboty. Jak wywołuje przerwanie od WD?
Witam mam takie pytanko, bo walczę teraz z uruchomieniem przerwania od UARTA na odbiorze. Bo zasadniczo FreeRTOS ma swoje przerwanie ten SysTickTimer i ono jest u mnie na timerze 3, co jest w ustawione w VIC0 na priorytecie 5. Z tego co zrozumiałem to semafory we Freertosie slużą do tego, żeby zsychronizować przerwania z systemem operacyjnym. Jako,...
I tu jest problem. Łamiesz tym podstawową zasadę w ustawianiu priorytetów przerwań w FreeRTOS'ie. Ustaw priorytet na: configLIBRARY_KERNEL_INTERRUPT_PRIORITY. Zdefiniowane jest toto w FreeRTOSConfig.h. W komentarzu masz opisane na jaką najniższą wartość możesz ustawić przerwanie korzystające z funkcji FreeRTOS'a.
Witam, Problem polega na tym, że po dodaniu do projektu bibliotek FreeRTOS'a i "poprawnym" jego skonfigurowaniu mam problem z SysTickiem i jego przerwaniem. Samo w sobie przerwanie działa poprawnie. Są zgłaszane przerwania co określony czas jednak taski nie są w stanie się przełączać. Planista ciągle siedzi w ostanio utworzonym tasku. Początkowo myślałem,...
Wystarczy trochę pomysłowości, przerwanie od timera i można robić prawie "wielowątkowe" cuda. Czyli napisać taki mini-OS :) Cały problem w tego rodzaju dyskusjach jest postawienie granicy pomiędzy tym, co jeszcze nie jest OS, a tym co już jest. Tu chodzi bardziej o wygodę, szybkość tworzenia oprogramowania oraz debugowania. Również programistów łatwiej...
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...
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...
Witam, Od jakiegoś czasu zmagam się z komunikacją SPI pomiędzy dwoma procesorami stm32l452re. Transmisją i odbiorem danych zajmują się oba procesory. Wysyłam 6 bajtów po 16 bitów, co daje nam sumarycznie 3 przerwania. W taskach od FreeRtosa transmisja danych i sprawdzanie otrzymanych bajtów odbywa się w nieskończonej pętli while. Problem dotyczy tego,...
NVIC_InitStructure.NVIC_IRQChannelPreemp... = configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... - 1; Ustawiasz przerwanie na jeden poziom POWYŻEJ dozwolonego. 4\/3!!
Witam, do działającego projektu chce dodać obsługę pamięci data flash przez SPI. Znalazłem gotową bibliotekę Atmela. Używam jej tak jak w przykładzie: PIO_Configure(pins, PIO_LISTSIZE(pins)); // AIC_ConfigureIT(BOARD_AT45_A_SPI_ID, 0, vSPI_ISR_Wrapper); AIC_ConfigureIT(BOARD_AT45_A_SPI_ID, 0, ISR_Spi); SPID_Configure(&spid,...
Hej, nie mogę znaleźć na forum podobnego problemu. Otóż pracuję z mikrokontrolerem STM32F100RB (płytka stm32vldiscovery) i chciałbym wykorzystać przerwanie od USART podczas pracy z FreeRTOS. Problem polega na tym, że nie wiem, w którym miejscu zdefiniować przerwanie. Uruchamiam je funkcją USART_ITConfig(USART2, USART_IT_TXE, ENABLE) i niestety program...
Witam. Jakie są różnice pomiędzy FreeRTOS 6.1.1 a 7.1.0? Prosty program mrugający diodą działa mi pod wersją 6.1.1 a pod 7.1.0 ląduje w default_handler. Przerwanie następuje po wykonaniu tego kodu freertos'a. void vPortStartFirstTask( void ) { __asm volatile( " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate...
Cześć, Przed uruchomieniem planisty vTaskStartScheduler(); działa moja funkcja, która obsługuje przerwanie od SysTicka. Po jego włączeniu podejrzewam, że freeRtos sobie jakoś zmienia ten wektor, tylko nie mogę zlokaliwoć jak to robi i gdziej est nowa funkcja obsługi tego przerwania. SysTick jest mi potrzebny do taktowania fatFSa.... Jak to można rozwiązać?...
Miałem zrobić coś podobnego, nie wiem czy zrobione to było dobrze i optymalnie ale działało. Każdy task miał utworzony statycznie bufor na ok 100bajtów i w momencie potrzeby wysłania czegoś do terminala zajmowało semafor z czasem oczekiwania ok 100. Gdy udało mu się go zająć to wysyłało przez DMA stosowny komunikat i przerwanie od zakończenia transmisji...
Nic. Wszystkie wartości PRIGROUP od 0 do 3 mają takie same znaczenie czyli 16 grup i 0 sub. No właśnie w teorii też myślę że tak jest ale praktyka jest dla mnie trochę inna jeśli chodzi o FreeRtos. Na stronie http://www.freertos.org/RTOS-Cortex-M3-M... piszą wyraźnie: If you are using an STM32 with the STM32 driver library then ensure all the priority...
Dziękuję za szybką odpowiedź. Opisz na czym polega problem, bo to że kod który nic nie robi z wyłączoną optymalizacją zajmuje ileśtam czasu który niekoniecznie jest stały to jest najwyżej "sztuczny problem", a nie "problem". W skrócie chciałbym dowiedzieć się skąd wynika różnica czasu wykonania się tej samej instrukcji w aplikacji bez systemu operacyjnego...
Widzę jednak, że freeRTOS działa na AVRach: https://www.freertos.org/RTOS_ports.html W pierwszej wypowiedzi nie pisałeś, że chodzi o AVR. Odpuść sobie RTOS na AVR. Ma on spore ograniczenie no i RTOS wymaga "trochę" RAM, tak jak i wszelkie bufory (np dla UART) aby RTOS mógł "rozwinąć skrzydła" a AVR mają mało RAM poza Mega1284. Tak z ciekawości - próbowałeś...
Nie wiem czy temat aktualny, ale może się komuś przydać. Nie czuje się ekspertem w dziedzinie znajomości FreeRTOS'a, ale chciałem sie podzielić moimi doświadczeniami w tej dziedzinie. Ja do wprowadzenia procesora w tryb uśpienia "SLEEPMode" (jest to pierwszy że stopni usypiania) użyłem funkcji: vApplicationIdleHook(). W tej właśnie funkcji dodałem funkcję:...
Nie jestem programistą. To do czego potrzeba Ci kompilacja FreeRTOSa? Zupełnie nie mam pojęcia o czym mówisz. Może więc czas zainteresować się podstawami, a nie systemami operacyjnymi czasu rzeczywistego? Możesz podać więcej wskazówek? Przerwanie SVC ma się nazywać dokładnie tak jak wymaga tego FreeRTOS, a w Twojej tablicy wektorów nazywa się inaczej...
Witam! Piszę aplikacje pod FreeRTOS / STM32 i napotkałem się na taki problem. W systemie uruchomione mam przerwania które to ustawiają semafory a te zezwalają na pracę tasków uruchomionych pod FreeRTOS. No i wszystko jest fajnie pięknie puki ustawienie semafora nastąpi już po uruchomieniu systemu czyli vTaskStartScheduler() Pomijam już fakt, że z chwilą...
Skoro tak to pokaż w kodzie gdzie ten WD jest ustawiany i przerwanie od niego, bo ja nie znalazłem. Odnoszę się do kodu ze strony https://github.com/feilipu/Arduino_FreeR... [syntax=c] BaseType_t xPortStartScheduler( void ) { /* Setup the relevant timer hardware to generate the tick. */ prvSetupTimerInterrupt(); /* Restore the context of the...
Może jakiś kawałek listingu żeby mi to sprawniej poszło bo na sieci jakoś nie mogę znaleźć żadnych informacji...z góry dzięki! Słabo szukasz, w przykładach do freeRTOS np ARM7_LPC2138_ROWLEY masz bardzo prosty przykład wykorzystania przerwania zewnętrznego. Kod jest jasny. Przerwanie vButtonISR*() jest powiązane z taskiem vButtonHandlerTask() i w nim...
A spróbuj przenieść tworzenie semafora do taska. Teraz nie wiadomo co wystartuje pierwsze, przerwanie czy task. Poza tym w miarę rozrostu kodu Ciężko będzie o jego analizę. Wiem, że extern wygląda kozacko i świadczy o zaawansowaniu programisty, który go używa, ale na dobrą sprawę, nie wiadomo potem gdzie szukać tej zmiennej. Rozumiem, że to powinno...
Witam Na początku zaznaczę, że to moje pierwsze kroki w FreeRTOS. Staram się uruchomić HOST USB (odczyt/zapis Pendrive) w własnym systemie z procesorem LPC1758. Po kilku próbach z FreeRTOS zaimplementowałem prostą komunikację przez RS-232 (do komunikacji dwustronnej). W tym przypadku przerwania działają bezproblemowo. Przy próbie implementacji HOST-USB...
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...
Przeglądałem rozwiązanie obsługi SPI pod Freertos z demo, ale z tego co widzę wszystkie opierają się o pooling. //--- U mnie wygląda to w zasadzie podobnie, tyle że z użyciem kolejkowania void prvSPI_GatekeeperTask(void *pvParameters) { _SPI_Params CurrentStructSPI; for(;;) { xQueueReceive( xSPI_Queue, &CurrentStructSPI,...
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...
To i tak nie ma zmiłuj. Odpalenie DMA w trybie M2M i samo uśpienie wątka na czas kopiowanie zajmie znacznie więcej czasu niż kopiowanie bloków 32bit. Sądzę, ze zajmie również więcej czasu niż kopiowanie bajt po bajcie, gdyż: - na odpalenie DMA trzeba liczyć z 4 instrukcje str + ldr adresu bazowego DMA + ldr stałych - szacuję na 16 cykli - uśpienie wątka:...
No właśnie o priorytetach wiem, 15 top najniższy dlatego wszystkie przerwania mają Dodano po 2 Niestety zwiększenie do 4kB stosów (Stack Configuration i Heap Configuration) w niczym nie pomogło, program wchodzi do przerwania i zawiesza się przy sprawdzaniu flagi. Jak nie sprawdzam flagi to wszystko działa. Wychodzi na to, że musiałbym na te 4 klawisze...
Co innego gdyby to rozbić na małe fragmenty sekwencyjnie wywoływane, pomiędzy którymi znajdzie się miejsce na realizację innych zadań. Tyle, że to już wywraca do góry nogami całą filozofię programowania sekwencyjnego. To już zahacza o wielowątkowość. Ze swojej strony - np. taki FreeRTOS jest fajną zabawką, ale niestety czasem narzut (zużycia RAM, nie...
(at)Zari44 Mi sie bardzo nie podoba jak ty odbierasz dane z GPS, nie dosc ze parsowanie i to bardzo kiepskie zrobione jest w przerwaniu to masz bardzo duza szanse ze XXX_buffer_index wyjedzie poza zdeklarowany bufor w przypadku braku 0x0A Ja bym ten fragment doprowadzil najpierw do ladu i skladu np. dodal jakis ladny bufor kolowy i calosc parsowania...
Witam Przymierzam się do portowania FreeModbus na STM32 i mam kilka problemów wynikających z wymagań. Platform specifics (port.h) You should first check the file port.h and check the if the examples are already suitable for your platform. You must at least define the macros for enabling ENTER_CRITICAL_SECTION and disabling EXIT_CRITICAL_SECTION interrupts....
Faktycznie wygląda na to, że obsługa semaforów wpływa negatywnie na to. Musze przyznać, że jestem w lekkim szoku, ponieważ pomiędzy dwoma zboczami jest 400 us, procesor taktowany jest zegarem 180MHz, a w samych wątkach niewiele się dzieje. Moja opinia jest subiektywna i może zostać uznana za stronniczą (z racji tego że tworzę własny RTOS), jednak uważam...
Hmm... Pokaż instrukcje "obok" bo na tej na pewno się nie wykłada - jest to rozkaz załadowania do r0 wartości spod adresu "76 dalej niż obecne PC", co na pewno istnieje i jest "za" funkcją (zresztą w komentarzu masz nawet adres tych danych - c90). Przypuszczam, że abort wywołuje się tutaj, bo np do procka dopiero teraz dotarło, że ma wykonać ABORT,...
Witam, mam problem z sprzętowymi przerwaniami na FreeRTOS-ie, dla LPC1768 (Keil v.4.60). Otóż, wstępnie już freeRTOSa ogarnąłem, taski, semaphory, softwareowe przerwania. Wszystko fajnie działa. Przyszedł czas na obsługę przerwań sprzętowych. Próbowałem dołączyć pliki .c i .h które mam do obsługi przerwań danej peryferii, jak i bezpośrednio do projektu...
a CO uchroni przed takimi zjawiskami które opisałem powyżej? Uzyć dwóch rdzeni (procków)? Dwuportowej pamięci? Ogolny strumień danych jaki przepływa przez procka to: W jedna strone: ----------------------------------------... 1.komenda leci po UART RX, znaki do fifo 2.czytaj z fifo dopóki ';' 3.parsuj do znaku ';' 4.sklej komende wewn. dla CANa i wrzuc...
Witam! Walka jest ostra, ale z każdą chwilą tracę nadzieję EDIT: przy synchronizacji flagą jakimś sposobem gubione jest pierwsze przerwanie, więc jeśli za pierwszym razem nie czekam na flagę, to potem już idzie, tyle że się trochę UART sypie - po 14tu znakach wysyłane są dwa zera... Jakieś pomysły co robię źle? 4\/3!!
Tak jakoś mnie naszło to pytanie bo main + IRQ_handler nie za bardzo wyglądają na pracę wątkową. Bardziej to przypomina powrót ze zwykłego przerwania do pętli głównej (co oczywiście jest wydajniejsze od pełnego context-switchingu) i można by się przyczepić że z pełną funkcjonalnością RTOSa (np. na wzór 'xTaskResumeFromISR' które zajmuje te 1k cykli)...
freertos kolejka przerwanie stm32 freertos przerwanie freertos biblioteka
wysoko masztu volcano nagrzewnica pobrać sieć aktualizacja
Błąd E32 w płycie indukcyjnej Bosch - co oznacza? Ford Focus C-Max 1.8 benzyna – przepalanie bezpiecznika F75 w BCM, podgrzewane lusterka, dysze, światła przeciwmgielne