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,...
Jeżeli chcesz używać funkcji z API FreeRTOS w przerwaniach to portENTER_CRITICAL() powinien maskować to przerwanie. To, które przerwania są maskowane określa definicja: configMAX_SYSCALL_INTERRUPT_PRIORITY Znajduje się ona w pliku FreeRTOSConfig.h.
Trudno mi nie przyznać racji - faktycznie te przerwania nie są składnikiem systemu. Jednakże nie wierzę, że mogę to wrzucić gdziekolwiek. Skąd procek będzie wiedział, że to jest to konkretne przerwanie?
Witam, próbuję zrobić projekt, w którym używam przerwań zewnętrznych, na razie staram się chociaż jedno uruchomić, ale po wejściu w przerwanie mikrokontroler się zawiesza. Jedno zadanie włącza LCD, drugie miga sobie diodkami, a gdy naciskam przycisk to diodki się zatrzymują i nic już do resetu się nie dzieje. Jestem początkujący w tym temacie więc za...
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. Mam problem z odczytem z USART0 w przerwaniu. Mój kod: static void vTaskGPS(void *pvParameters){ AT91C_BASE_PIOB->PIO_PDR = 1<<0 | 1<<1; //Disables the PIO from controlling the corresponding pin (enables peripheral control of the pin). AT91C_BASE_PIOB->PIO_ASR = 1<<0 | 1<<1; //Assigns the I/O...
Witam, mam następujący problem: na samym początku programu inicjalizuję wyświetlacz a następnie touch panel. Podczas inicjalizacji touch panela powinienem odbierać pewne dane z układu sterującego po uarcie. Jednak dopiero po uruchomieniu scheduler'a zgłaszane są przerwania z lini rx. Przeglądając kod zauważyłem, że kiedy skomentuję dwie linijki kodu,...
Od niedawna pracuje z ARM (AT91sam7s256) i zatrzymałem się obecnie na etapie uruchomienia FREERTOS. Sam star RTOS poszedł bez problemowo (użyłem dema ze strony http://www.siwawi.arubi.uni-kl.de/avr_pr... skompilowałem w GCC i wszystko śmiga ładnie pięknie (wątki, tworzenie ,usuwanie ,wstrzymywanie ) .Problem pojawia...
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 serdecznie kolegów, Od kilku dni staram się uruchomić FreeRTOS na układzie STM32F303 (płytka discovery). Jak się pewnie domyślacie - z marnym skutkiem. Doprowadziłem do stanu w którym kod kompiluje się bezproblemowo, jednak po wgraniu do układu urządzenie w ogóle nie reaguje w oczekiwany sposób (początkowo chciałem zaimplementować naprzemiennie...
Witam. Mam problem z uruchomieniem stabilnie działającego sterownika ethernetu. Kozystam ze stosu LwIP, a aplikacja pracuje w systemie Free RTOS. Problem polega na tym , że po pewnym (niepowtarzalnym) czasie aplikacja przestaje odbierać ramki. Generalnie sterownik ethernetu oraz stos LwIP implementuje korzystając z przykładowego projektu STM, oraz książki...
Witam, Mam problem z realizacją przerwania z USART3 na STM32L152RBxx. W momencie wywołania przerwania debugger zatrzymuje się na funkcji default_handler(). Poniżej umieszczam kod: main: #include "stm32l1xx.h" #include "stm32l1xx_conf.h" #include <string.h> void GPIO_Conf(void); void RCC_Conf(void); void NVIC_Conf(void);...
Czesc, mam problem z konfiguracja przerwan zewnetrznych. Sprawdzalem kilka przykladow znalezionych w necie i zaden (prawie) nie dziala. Jedynym przykladem ktory dziala jest gotowiec z Atollic studio, i generowanie przerwan na porcie PA0. Niestety zadne modyfikacje na inne porty nie dzialaja. Oto moj kod: Inicjalizacja GPIO na porcie PB12: [syntax=c]void...
Witam, Szukałem na forum i nie znalazłem... Mam taki oto problem, przerwania są skonfigurowane w następujący sposób: [syntax=c] NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGr... NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp...
Witam, Naciąłem się na problem z przerwaniami z którymi nie mogę sobie jak na razie poradzić. Jeśli w bootloader'ze nie wykorzystam przerwać, to po skoku do aplikacji wszystko działa ok, jeśli natomiast zostanie tam wykorzystane, to aplikacja już ich nie wykonuje. Wydaje mi się że ma to związek z wskaźnikiem przerwania, ale nie mogę znaleźć rejestru...
Cześć, Mam taką funkcję jak poniżej, która powinna przełączyć procesor w tryb STOP2. Testowo wywołuję ją zaraz przed wejściem w pętle główną for(;;) w main.c Problem polega na tym, że jak bym tego nie robił, to procesor w ogóle nie reaguje na WFE. Przerwania są jak widać wyłączone, żadna flaga pending w EXTI nie jest podniesiona. Żadne przerwanie 'nie...
Używam środowiska, w którym dostępne jest coś podobnego do FreeRTOS. W moim programie używam przerwań od DCMI, Wywołują się one dość regularnie i uaktywniają wątek przetwarzający dane. Wszytko w zasadzie działa zgodnie z moimi przewidywaniami. Jednak bardzo sporadycznie następuje długa przerwa w zgłaszanych przerwaniach co doprowadza do przepełnienia...
NVIC_InitStructure.NVIC_IRQChannelPreemp... = configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... - 1; Ustawiasz przerwanie na jeden poziom POWYŻEJ dozwolonego. 4\/3!!
Racja, wychodzi na to, że systick jest konfigurowany z najniższym priorytetem (logicznym). Pytanie, czy taka konfiguracja jest poprawna? Każde przerwanie o wyższym priorytecie wywłaszczy Systick, czy nie zaburzy to działania całego systemu operacyjnego?
Kilka postów wyżej napisano, że jeżeli po stworzeniu semafora odrazu weźmiesz to jest lipa bo się da. I jeszcze jedno, nie wiem jak w przypadku portu na SAM7S ale w przypadku STM32 po utworzeniu semafora wywołanie SemaphoreTake zawsze zwraca pdTRUE, nawet jeżeli nie została wywołana funkcja SemaphoreGive
Szkoda trochę, że w Practical Guide nie opisali choćby ogólnej metody tworzenia przerwań pod tym OS. Bo nie ma czegos takiego. Jesli twoje przerwanie moze zmienic kontekst (czytaj przelaczyc zadania) to sam musisz o to zadbac. Nie kazde przerwanie musi zmienic kontekst a poniewaz jego zachowanie i odtwarzanie jest czasochlonne wiec nie nalezy tego...
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ę:...
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ć?...
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...
Dzięki wielkie za odpowiedź. Mam jeszcze jedno pytanie. Jak mam np wykonać obsługę jakiegoś czujnika komunikującego się przy pomocy SPI lub I2C to jak to zrobić pod FreeRTOS?. Mam przykładowo jakiś task który odczytuje stan czujnika ale powiedzmy zostanie przerwany przez jakiś inny task o wyższym priorytecie to to odczytywanie czujnika może się nie...
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...
Witam, korzystam z toolchaina od freddiego i Eclipse Luna pod stm32 discoveryf4. Debugowanie ogólnie działa jednak mam problem z breakpointami postawionymi w taskach od FreeRTOSa. Otóż są one jakby ignorowane, program nigdy się w nich nie zatrzymuje chociaż program wykonywany jest poprawnie. Jeśli postawię breakpoint w innym miejscu (przerwanie lub...
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ś...
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ą...
A zająłeś najpierw semafor ? xSemaphoreTakeFromISR. Nie możesz zwolnić semafora jeśli go wcześniej nie zajmiesz. Niby oczywiste, ale z postu, który napisałeś wnioskuję dziwne rzeczy Semafor jest zajmowany dwa razy. Raz po stworzeniu bez blokowania, drugi raz w miejscu gdzie wątek ma czekać na przerwanie. Dla STM32 configPRIO_BITS jest równe 4. U siebie...
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:...
Czy moze po prostu olac w tym momencie HAL... utawic sobie ADC, TIMER, DMA po swojemu i obslugiwac przerwanie z DMA w CH_FAST_IRQ_HANDLER (dotyczy chibios)... No właśnie (; tylko w takim wypadku chyba lepiej by mi bylo zastosowac jakis sam kernel ktory zalatwi mi same przelaczanie watkow... Np FreeRTOS. Ne wiem, po co do takiego zadania angażować RTOS,...
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...
(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 wszystkich W ramach nauki FreeRTOSa napisałem program, w którym jeden task miga diodą, drugi natomiast współpracuje z przyciskiem. Gdy naciśnięty zostaje przycisk, następuje przerwanie EXTI0, które "daje" semafor xButtonSemaphore. Natomiast zadanie vButtonTask czeka na ten semafor, "bierze" go gdy staje się dostępny, po czym albo usypia, albo...
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....
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ść...
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. No ok :] Skoro dla Ciebie raz_dziala_raz_nie != nie_dziala, to trwoga... Jesli juz precyzowac, niewiele zalezy od synchronizacji watkow. Zalezy od uzycia danego peryferium. Im czesciej watki beda konkurowac o jedno...
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)...
Tak czytając ten fragment odniosłem wrażenie że omawiasz opóźnienie związane z reakcją na przerwanie, a nie na reakcje samego wątku. Chodzi o opóźnienie reakcji na "zdarzenie odblokowujące wątek". Przykładowo wątek A czeka na semafor, wiec jest w stanie "zablokowanym". Teraz następuje zdarzenie - semafor zostaje "ustawiony" (przez przerwanie lub przez...
Nie bardzo rozumiem. Wszystkie procedury obsługi HD44780 z badaniem bitu busy, traktują go jako informację że można wysłać następne dane, np. wysylam polecenie LCD_Clear i natychmiast po nim wysyłam jakiś komunika to wyświetlenia. Pierwsze znaki nie zostaną wyświetlone, ponieważ kontroler jest jeszcze zajęty, albo wysyłam komunikat w postaci serii znaków...
Dzień dobry! Przycisk podpięty do płytki mam w/g schematu: http://arduino.cc/en/uploads/Tutorial/bu... Kod mojego maina: #include <stm32f10x_gpio.h> #include <stm32f10x_rcc.h> #include "stm32f10x_flash.h" #include "misc.h" /* Scheduler includes. */ #include <stdio.h> #include "FreeRTOS.h" #include...
freertos przerwać przerwać freertos stm32 freertos
ferguson ustawi zmierzyć impedancja antena zasilać serwo
Dezaktywacja trybu awaryjnego Peugeot 607 2.2 HDi P1517 Renault Premium 460DXi 2010 – komunikat „niebezpieczeństwo wyłączenia wyłącznika głównego akumulatora” po wyjęciu kluczyka