Twój kod jest zły, bo czwórki bitów dla poszczególnych przerwań są w tych tablicach IP[] upakowane po 8. Funkcje z CMSISa do przerwań (do NVIC) są generalnie funkcjami inline, więc efekt finalny będziesz miał taki sam - czy użyjesz swoich dostępów do rejestrów, czy tych funkcji. Ja bym proponował zostać przy tych funkcjach. Jak koniecznie chcesz poczytać,...
Ewentualnie jak ustawić priorytety/wywłaszczenia? Ja bym spróbował zrobić to w ten sposób jak poniżej. To taki przykład o co mniej więcej w tym chodzi. Podzieliłem priorytety na 4 grupy o ważności priorytetów od 0 do 3 za pomocą funkcji dostępnych w CMSIS. Im wyższy numer grupy ( 0G, 1G, 2G, 3G) tym wyższy priorytet, z tym że taki podział mówi o wywłaszczeniu....
Opcja optymalizacji jest. Domyślnie wyłączona ze względu na to że wydłuża to czas kompilacji. Chwilowo mam inne priorytety finansowe, ale kiedyś kupię od Pana Leona jedną płyteczkę z Xmegą i Wam pokaże jak się na nich jeździ pod Bascom`em :D ..a może i C bo z braku Xmegi bawię się STM32 w Keil
https://obrazki.elektroda.pl/9151185000_... Autor poniższego zestawienia jest inżynierem i konsultantem wsparcia dla systemów wbudowanych. W swojej karierze poznał on szereg różnych architektur mikrokontrolerów, różniących się wydajnością, wyborem peryferii, poborem zasilania etc. Wybór odpowiedniego układu stanowi zawsze o sukcesie...
Poczytaj w dokumentacji, sprawa jest tam poruszona. SysTick i PendSV mają być na najniższym, a inne przerwania - które używają funkcji RTOSa - nie mogą mieć wyższego priorytetu (niższego numerka) niż configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... lub configMAX_SYSCALL_INTERRUPT_PRIORITY. Obstawiam, że jedna z tych wartości nie jest używana i w ogóle jest...
Niby proste, ale jak ma się mało do czynienia z STM32 to zaczyna byc jednak mylące Mam takich parę pytań bo sie lekko zamieszałem, a nie do końca wiem gdzie to może być napisane? 1. Które z przerwań, wyjątków są związane z rdzeniem, a które za tzw. zewnętrzne? 2. Które przerwania "przechodzą" przez NVIC? Każde z ustawianym priorytetem. Z tego co rozumiem...
Mam problem z kolejkowaniem przerwań i wywłaszczaniem w STM32 Cortex M3. Otóż mam 2 timery, TIM6 oraz TIM12 o tym samym priorytecie (jeśli się wykonują, nie mogą się wywłaszczać, dlatego ten sam priorytet). Czasem używam globalnego wyłączenia przerwań i w tym czasie zgłaszają się oba, z tym że pierwsze ( po włączeniu IRQ) wywołuje o niższym numerze,...
Jeśli nie chcecie odpowiedzieć, to po co nabijacie sobie puste posty... Przecież napisałem: czy jakikolwiek kod I2C na przerwaniach, który poprawnie działa, zawiesi się jeśli zmniejszymy priorytety ?
(at)tmf - zgadzam się z wszystkim co napisałeś, ale (powtórzę się jeszcze raz) - jeśli weźmiemy tanią platformę jak STM32F411RE Nucleo to w porównywalnej cenie nie znajdziesz nic wystarczająco uniwersalnego i mocnego w świecie 8bit. Sam zdziwiłem się, że ARM z takimi możliwościami może być TAK TANI. (at)dondu To znowu jest Twój punkt widzenia. Ktoś...
Znowu małe pytanie... Działa Ci operator new, czy coś trzeba jeszcze dodać ? U mnie procesror wchodzi w HardFault_Handler jak próbuje go użyć : Hmm... W aplikacji testowej jest sporo alokacji dynamicznych w teście kolejek, choć są one jednowątkowe oraz dosyć zorganizowane (po kilku alokacjach jest zawsze dealokacja wszystkiego). Tak więc odpowiedzieć...
Dzięki wielkie za pierwszą podpowiedź jutro sprawdzę sugestię, ale priorytety w NVIC rozumiem : Hmmmmmm... czyli w pierwszej grupie TIM1 ma preemption=0 i sub=2 natomiast systick jest w 0 grupie i ma preemption == sub == 0 czyli wg mnie powinien wywłaszczać. P.S: W timerze delay jest mi potrzebny bo wysyłam dane po rs485 i muszę odczekać czas ze względu...
Witam Jestem początkującym w temacie FreeRTOS i mam parę problemów ze zrozumieniem działania tego systemu. Jeśli mam jakąś obsługę przerwania i w czasie jego wystąpienia ustawiam semafor na który czeka jakieś zadanie o niskim priorytecie (albo nie najwyższym) to po wyjściu z tego przerwania to zadanie będzie niezwłocznie wykonywane czy system poczeka...
Nie mogę pokazać kodu ponieważ nie jestem jego właścicielem. USART2 wykorzystywany jest do komunikacji z SIM900, USART1 oraz TIM3 do Modbus RTU. Jakie ustawić priorytety od w/w źródeł przerwań ?
W tym wątku jest wszystko już napisane. Masz np 16 priorytetów przerwań. 16 bo tyle np w STM32 zaimplementował producent. W rejestrach priorytetów te 16 priorytetów jest reprezentowane przez 4 najstarsze bity XXXX----. Bity X mogą być jeszcze rozdzielone tworząc grupy priorytetów i subpriorytety np GGSS----. G oznacza numer grupy, S oznacza numer subpriorytetu....
michalko12 a podział na grupy, to dobrze zrobiłem za pomocą funkcji: To zależy co chcesz z tym zrobić, w linku u góry jest to opisane, w stm32 wywołanie funkcji: NVIC_SetPriorityGrouping z parametrami 0, 1, 2, 3 , lub nie wywołanie jej wcale robi to samo czyli masz: Group priorities =16 i Subpriorities =0 Jeśli chcesz używać subpriorities to np wywołujesz:...
W jaki sposób DMA rozwiąże wielozadaniowość? No nie wiem, może choćby przez to, że DMA może zająć się "inicjalizacją pewnych urządzeń" kiedy procesor robi coś innego. Inicjalizacji? DMA potrafi tylko transmitować dane i nic więcej. Używał kiedykolwiek kolega DMA? Wie jak działa? Odnoszę wrażenie, ze nie. DMA potrafi trochę mniej niż przerwania ale...
No na jedno wychodzi i o tym napisałem w #16, ten zapis do AIRCR mozna sobie darować. To zostało wpisane w ramach aktu desperacji dopiero... Co nie zmienia faktu, że te priorytety są poustawiane w tym RTOSie zgodnie z zaleceniami, a zwolnienie semafora z przerwania nadal nie działa...
BlueDraco, dzięki za odpowiedź Rozumiem, że Twoje pytanie jest pytaniem retorycznym? Jasne - wszystkie linijki: USART_ClearIT_pendingBit() są bezsensowne w przerwaniach. Czemu różnicuję? Myślałem, szczerze to próbowałem bardzo dużo, żeby doprowadzić mój projekt do używalności - nawet próbowałem zmieniać priorytety przerwań ustawiając dla sensorów wyższe...
Jest i na stronie FreeRTOSa jak wspomniał autor A special note for Cortex M3 users: Remember that Cortex M3 cores use numerically low priority numbers to represent HIGH priority interrupts, which can seem counter-intuitive and is easy to forget! If you wish to assign an interrupt a low priority do NOT assign it a priority of 0 (or other low numeric...
Mały przykładzik z ustawieniami NVIC, priorytety przerwań i gdzie znaleźć opis w dokumentacji(PM0056): static void NVIC_conf(void){ //--------------------------------------... SCB->AIRCR |= (3<<8); //[Optional] Define interrupt fielding group, PRIGROUP[1:0]=11. see: PM0056 Programming...
Witam, scalak STM32F103, mam problem z dziwnym zachowaniem się logiki - utworzone zmienne się na siebie czasami nakładają, znaczy to tyle, że tworząc np dwie tablice 4 elementowe ostatni element pierwszej i pierwszy drugiej się na siebie nakladaja - na co to może wskazywac ?? Jak zrobię wiecej elementów w tablicy niż jest wykorzystywane, to jest jakaś...
Na priorytet zawsze jest 4 bity czyli możliwe jest 16 poziomów priorytetów. Natomiast to jak to podzielisz ma ułatwić programiście życie i zapanowanie nad priorytetami poprzez łączenie je w grupy.
Witam, Z freeRTOSem dopiero się zapoznaje, mam kilka pytań odnośnie kolejek, bazuje na tutorialu twórcy tego systemu, lecz nie do końca rozumiem niuanse przez język angielski. Mam przykładowo 2 zadania, jedno wysyła dane do kolejki, drugie ma je odbierać. Odbiornikiem jest vTaskLCD(); który ma wysłać dane do wyświetlacza, natomiast vSenderLCD(); wysyła...
No bo wciąż ustawiasz rejestr IMR "odwrotnie" - zajrzyj do manuala co oznacza 0, a co oznacza 1. I w ramach testów zrezygnuj z ustawiania jakichkolwiek priorytetów przerwań czy czegokolwiek z nimi związanego. 4\/3!!
Witam, Używam FSMC do obsługi wyświetlacza, a timera do generowania przebiegu który steruje serwomechanizmami. Zauważyłem taką przypadłość, że jak coś zmieniam na ekranie to serwa lekko drgają, co zapewne jest spowodowane jakimś opóźnieniem w wysterowaniu wyjścia przez zegar i/lub uruchomieniu przerwania które ładuje następna wartość do rejestru (jeden...
12 cykli - tyle zajmuje przejście do obsługi przerwania 6 cykli - tyle zajmuje przejście z przerwania do przerwania o wyższym priorytecie 6 cykli - tyle zajmuje przejście do przerwania o niższy priorytecie bezpośrednio po zakończeniu przerwania o wyższym priorytecie 12 cykli - tyle zajmuje wyjście z przerwania. Ta zasada tyczy się wszystkich przerwań
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...
Wychodzi na to, że jednak nie miałem racji (; Anyway - w przypadku post-inkrementacji (X++) operator ten ma wyższy priorytet niż operator *X ( http://pl.wikibooks.org/wiki/C/Operatory... ), a działa w taki sposób, że zwraca aktualną wartość X, a potem sobie ją powiększa, dlatego operator *X operuje na poprzedniej...
1.Czy w CMSIS jest jakieś makro wywołania, czy trzeba to pisać ręcznie? Ręcznie. O tak - https://github.com/DISTORTEC/distortos/b... 2.Czy to przerwanie się inicjalizuje? Co przez to rozumiesz? 3.Czy trzeba mu ustawiać priorytet (domyślny ma chyba najniższy i o to mi chodzi)...
Mam tylko parę doświadczeń, że peryferia są w jakiś sposób priorytetyzowane i włączenie dwóch dzielących ten sam pin i ustawienie tego pinu na alternate function zawsze skutkuje przydzieleniem tego pinu dla tego samego peryferium. Akurat timery mają możliwość konfiguracji (włączania) każdego kanału z osobna. 4\/3!!
W ciągu ostatnich dwóch lat w EP pojawił się cykl artykułów poświęconych programowaniu STM32 bez SPL z wieloma przykładami. A i ważna uwaga co do tekstu: w aktualnych, nowych wersjach plików nagłówkowych dla F4 już nie ma BSRRL i BSRRH, a jest BSRR (co powoduje, że programy napisane pół roku temu już się nie kompilują z nowymi plikami nagłówkowymi)....
Powiększ stertę i stos do 2KiB, tak na początek. Transmit musi być wołana z przerwania USB lub innego o tym samym priorytecie.
Ok, rozumiem :) no tak, właśnie doczytałem z tym SysTickiem :P to tylko pozostaje to SetPriority - ustawiać czy nie?:P a jeśli tak, to jakie liczby podaje jako priorytet?
Skoro nie masz problemu z timerem, to po co w ogóle o nim pisać i po co testować program który ma też przerwania od timera? Niemniej jednak na początek brawa za to, że NIE używasz słynnego i popularnego badziewia (; Wg mnie (skoro chodzi o pin zerowy), powinieneś konfigurować rejestr AFIO->EXTICR[0], a nie 1. Problemem jest manual niezgrany z plikiem...
Pierwsza ok, ale gdy faktycznie chcę ustawić 0 priorytetów dla grup i 16 subpriorytetów, to chyba ta linijka będzie ok? A skoro mam już 16 subpriorytetów i chcę, żeby ten TIM2 miał czwarty, to trzecia linijka też chyba powinna być zawarta? Jeśli źle kombinuję to naprowadź mnie, będę wdzięczny Nigdy nie wgłębiałem się w priorytety, ale z racji tego,...
musisz więc wyłączyć JTAGa, bo on zwykle ma priorytet. 4\/3!!
Ad 1 - Właśnie tak - nie da się. Ad 2 - Zapewne tak. Jak wiesz, ja nie RTOSowy, ale ogólnie kiedy mam coś wysłać do hosta w oprogramowaniu device - zgłaszam przerwanie o tym samym priorytecie, co przerwanie USB i wysyłam (wołam jakieś tam Send) w tym przerwaniu właśnie. Podobnie w przerwaniach wołam procedurę Receive, która, jak wiadomo, nic nie odbiera,...
A czy po wyłączeniu przerwania i ponownym włączeniu zostanie ono od razu wykonane jeżeli w międzyczasie nadszedł sygnał? Zgodnie z priorytetami i kolejką.
Autorze, coś czuję, że nie do końca chwytasz koncepcję CAN-a. Nie wiem, co Twój projekt ma realizować, ale jest kilka założeń, na których bazuje rozwiązanie korzystające z magistrali CAN: - wszystkie urządzenia podłączone są do jednej magistrali (dwa przewody: CAN-H i CAN-L). Sygnał przesyłany jest różnicowo. Magistrala z obu stron zakończona jest rezystorami...
Dokumentacji NVIC należy szukać na stronie ARMa, w dokumentacji od ST masz tylko kilka detali typu przyporządkowanie kanałów i ilość priorytetów, czyli rzeczy zależne od implementacji. 4\/3!!
To nie jest to samo Jeżeli released ma wartosc 00000100 i zrobię sprawdzanie czy drugi bit jest ustawiony, to dostanę fałsz, bo będzie z AND wynik (00000100 & 00000010 = 00000000) == 00000010 A gdy będę sprawdzał ustawienie 3 bitu to dostanę prawdę, bo (00000100 & 00000100 = 00000100) == 00000100 No tak, świat jest piękny, a priorytety operatorów są...
Dodałem tylko: AFIO->MAPR=0x02000000; //SWJ_CFG[2:0]=010 - JTAG disabled & SWJ enabled; Ustawianie portu i taktowanie jest ok. I nadal nic Sadząc po tym to w trybie JTAG-DP Disabled and SW-DP Enabled pin NJTRST powinien być dostepny jako normalny pin http://obrazki.elektroda.pl/5460659000_1... Ewentualnie może chodzi o...
W sumie to mam pytanie czy dobrze rozumiem jak to ma działać. Tak skonfigurowany DMA wykonuje transfer raz, w momencie ustawienia bitu ENABLE. Kod z moimi komentarzami (wypisane z DSa). [syntax=c] void DMA_Conf(void) { RCC->AHBENR = RCC_AHBENR_DMA1EN; /* Procedura konfiguracji kanałów DMA 1. Ustawić adres rejestru peryferiów w rejestrze DMA_CPARx Dane...
No ubaw jest pierwszej klasy... Wrzucisz w końcu tyle kodu, żeby była w nim KOMPLETNA inicjalizacja wszystkiego? Przecież nikt tutaj nie wie, co jest w Twojej funkcji HW_Init_GPIO(), ani w pozostałych (System_Init()?), które mogą coś jednak zmieniać w SPI2 czy istotnych GPIO. A jeśli uważasz, że nic nie zmieniają, to zakomentuj je i potem wywal z tego...
Owszem, ale wspomniał też, że ma poprawione libsy 2.2-dev dla STM32 i jest chętny je udostępnić. Oczywiście wszystko bazuje na arduino, bo i komu by się chciało na "natywniejszą" formę przepisywać skoro tam mają "one ring to rule them all". Tj. obsługa wielu różnych platform przez jeden ekosystem. I właśnie powiązania z tym ekosystemem powodują, że...
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, ...)...
Witam A jak masz ustawione priorytety przerwań? Przypadkiem przerwanie od DMA nie wywłaszcza Ci przerwania od DCMI? Proponował bym sprawdzić Status Register w przerwaniu DMA, co jest źródłem przerwania, sam ostatnio miałem taki przypadek, że mimo tego, że nie włączałem przerwania od Start Conversion[SC] a jedynie End Conversion[EC] w ADC, kiedy ADC...
Skoro pętla opóźniająca była w porządku to czekanie na wyzerowanie SPI_SR_BSY też. Odradzałbym takie coś jeśli SPI miało by niską prędkość. Jak masz inne ważne przerwania możesz tak ustawić grupy i priorytety, że to bieżące zostanie wywłaszczone i zostaje myślenie tylko o pętli głównej.
Kolejny fan MagicNumbers. Zacznij od pojedynczego źródła przerwania a nie 4-stu. Flagę kasuje się na początku przerwania a nie na końcu. [syntax=c]SYSCFG->EXTICR[0]|=0; //ustwienie PA na przerwanie SYSCFG->EXTICR[0]|=(1<<4); // ustawienie PE na przerwanie SYSCFG->EXTICR[0]|=(1<<11); // ustawienie PEna przerwanie SYSCFG->EXTICR[0]|=(1<<15);...
Użyj DMA do zmiany stanu wyjścia portu - będziesz miał prawie sprzętowy PWM.
priorytety operatorów priorytety przerwań priorytety operator
ricoh reset bębna fujitsu lifebook klawiatura axion monitor
prostownik samochodowy prostownik samochodowy
Warunki zabudowy czy podział działki - co najpierw? Chrysler Town & Country 3.6 2014 - Błędy P0157, P0420, P2098