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ć,...
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...
Wg mnie się da - http://infocenter.arm.com/help/index.jsp...
skonfiguruj PRIGROUP na 4:4 Może to głupie pytanie, ale jak może być 4:4 skoro STM32 ma tylko 4 bity na priorytety? Jedyne sensowne ustawienia powinny w sumie dawać 4, a więc 0:4, 1:3, 2:2, 3:1 i 4:0 4\/3!!
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, 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...
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!!
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.
Zapoznaje się z STM32 i jestem na etapie I2C. 1. Jak to jest z tym o czym pisałem w poprzednim poście ? 2. Czy SysTick może zakłócać I2C ? (SysTick ma ważniejszy priorytet)
Nie ma to jak stworzyć sobie problem a potem dziwaczne metody rozwiązania. Trochę programów na Cortexy napisałem, i nigdy nie miałem potrzeby zapamiętywania stanu przerwań przy ich chwilowym blokowaniu Wg mnie to bezpośrednia próba przeniesienia zachowań z AVR do STM32 - to w AVR czasami stosuje się kopiowanie SREG, żeby zadbać o "atomowość". Programów...
1. Pierwsze 14 wyjątków pochodzi z rdzenia (2+14 adresów w tablicy). Te z rdzenia mają numery ujemne lub 2..15, spoza rdzenia - nieujemne lub od 16 w górę. 2. Jw, ale część wyjątków rdzenia też ma ustawiany priorytet. 3. Najlepiej zapomnij o "grupowaniu". W praktyce nie ma żadnego sensu korzystanie z tego. Domyślnie po reset mamy zawsze konfigurację...
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...
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?
z tego co rozumiem żeby dokonać jakiejkolwiek zmiany w rejestrze AIRCR należy tam również wpisywać 0x5FA po to by zapis nie został odrzucony. Chyba że źle kombinuje:P Dobrze kombinujesz, wcięło mi ten zapis :P SCB->AIRCR = AIRCR_VECTKEY_MASK | (3<<8); gdzie: #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) Chociaż...
Początek programu FreeRtos wygląda tak: /* Private define ----------------------------------------... #define LED_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LCD_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define USART_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) #define...
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)....
musisz więc wyłączyć JTAGa, bo on zwykle ma priorytet. 4\/3!!
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,...
Poprawiłem :) [syntax=cpp] void DMA_Config(void) { //konfigurowanie ukladu DMA extern uint16_t bufor1[4]; //Adres docelowy transferu DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; //Adres poczatkowy bloku do przeslania DMA1_Channel1->CMAR = (uint32_t)bufor1; //Liczba elementow do przeslania - 4 DMA1_Channel1->CNDTR = 0x4; //Konfiguracja rejestru CCR1 =...
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ą.
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ń
Zapisywać przez DMA to samo, co zapisujesz przy użyciu przerwań, tylko nie masz żadnych przerwań. Dwa kanały DMa programujesz na transmisję jednego słowa w kółko - jeden ustawia przez BSRR jedynkę, drugi przez BRR zero na wyjściu. Masz to opisane gdzieś w EP z 2016 roku.
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
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...
Przez czas jak pisałeś te dwa posty już ze 4x przejrzałbyś CAŁĄ listę przerwań, bo nie wiem skąd założenie, że koniecznie muszą być po kolei. P.S. Co złego jest w funkcji z CMSISa robiącej to samo co Ty tylko czytelniej? Przy okazji jak być jej użył, to nie robiłbyś zupełnie bezsensownego ORa... P.S.2. Funkcja z CMSIS jest typu inline - nie da się tego...
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)...
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...
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ń ?
(at)Piotrus_999 Te tajemnicze biblioteki są dostępne w internecie od ponad 10 lat bo sam używałem ich do pracy magisterskiej. Użycie google pozwoli Ci rozwikłać ta zagadkę. (at)Soberro Według mnie masz problem z problem z obsługą przerwań od przycisku. Byćmoże robisz tam coś czego nie powinieneś. Bez kodu nie da się więcej powiedzieć. Powinieneś zrezygnować...
IWDG ma timeout dopiero po 1,6s, a jest resetowany w tasku FreeRTOSa, który pstryka co 1ms, oraz w innym, który pstryka co 1s lub częściej, jeśli ma coś w kolejce... Jeśli używasz w ten sposób watchdoga, to w sumie możesz go nie używać wcale. Nie zabezpieczy Cię to wcale przed tym, że zawiesi się jakikolwiek inny task, a nawet jeśli zawiesi się jeden...
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....
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!!
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
Może warto zacząć od podstawowych obliczeń? Dane dla wyświetlacza to 480x640x3 = 921600 bajtów = 900 KiB. Pierwsze wrażenie może być takie, że wewnętrznej pamięci nie wystarczy na bufor obrazu, ponieważ nie jest to jednolity blok i część tej pamięci trudno współpracuje z DMA i LTDC. Ale w prostych aplikacjach, bez zaawansowanej grafiki, można ograniczyć...
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...
Nie jest to zagadka, tylko znajomość priorytetu operatorów czyli czegoś bardzo podstawowego: https://en.cppreference.com/w/c/language...
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. DMA potrafi trochę mniej niż przerwania ale nie obciąża CPU Czekaj, czekaj... Czy Ty właśnie porównujesz DMA do przerwania...? Co ma kompilator do wielozadaniowości? A czy autor tutaj...
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...
1. Priority mogę ustawić jak chcę? Generalnie tak. Zastosowałem mechanizm znany z innych RTOSów, czyli część priorytetów przerwań (niższych) może korzystać z funkcji systemu, a część priorytetów (wyższych) nie może. Ta druga część nigdy nie jest blokowana, ta pierwsza zaś jest blokowana w czasie większości operacji typu operacje na mutexach, kolejkach,...
(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ś...
Jeśli oba mają preemption 0 (a domyślnie wszystkie przerwania tak mają, chyba, że w STM32 jest inaczej niż wszędzie), to nikt nikogo nie może wywłaszczyć. Serdeczne dzięki za wytłumaczenie jak działa mechanizm priorytetów NVIC. Z tego rozumiem, że można zdefiniować maksymalnie 16 przerwań , które mogą się wzajemnie wywłaszczać (grupa 4) ? Subpriorytet...
przerwanie powinno być z atrybutem ((interrupt)) oczywiście jest ten atrybut (i tylko ten), jednak nie w definicji tylko deklaracji. Wszystko w Twoim pliku vectors.c. a próby wpisywania wartości 0xFFFE do rejestru SR nie wydają mi się szczególnie mądre. W końcu rejestr ten ma kilka pól które są "reserved" więc nikt nie wie co robią, a poza tym ST pewnie...
Z tego co piszesz wynikało by, że w zasadzie tego kodu się po prostu nie da używać w sposób przewidziany przez autorów (; Rozumiem, że aby to ominąć to funkcję `USBH_Process(&hUSBHost);` musiałbym wywoływać np. z przerwania od timera, które miałoby taki sam priorytet jak przerwanie od USB?
Czy ustawienie priorytetów załatwi problem czy może jest jakiś inny powód że przestało to działać? Definitywnie to drugie. Na 99% Twoje przerwania trwają zbyt długo lub użyłeś w nich (pośrednio lub bezpośrednio) funkcji blokujących/oczekujących/pollingu. Jeśli zaczniesz kombinowac z priorytetami bez zrozumienia przyczyny, to tylko wpędzisz się w więcej...
Sporo się namęczyłem, zanim ruszył mi slave transmitter w STM32F103. W 107 będzie tak samo. Po pierwsze zobacz do errat - tam między innymi napisali, że przerwanie i2c musi mieć najwyższy priorytet, bo inaczej się wiesza. Poza tym przykłady nie zadziałały mi od razu, a problemy mają też inni, o czym możesz poczytać na main.c // main.c main()...
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...
Czy coś jeszcze jest obsługiwane przez DMA1? Nie, wykonywany jest tylko ten program, nic innego nie wykonuje DMA. Czy próbowałeś ustawić wysoki priorytet dla tego kanału DMA? Po tym jak napisałeś spróbowałem ustawić najwyższy priorytet, ale nic to nie pomogło. Czy procesor próbuje uzyskać dostęp do tablicy, w czasie pracy DMA? Nie, w żadnym innym miejscu...
Flagę czyszczę. Kompilator z taką stałą sobie poradzi i ja policzy podczas kompilacji. Nie trzeba constów. W miarę poprawna wartość ilość pomiarów na półokres sugeruje, że timer2 działa tak jak trzeba. Podejrzewam problem z priorytetami przerwań, ale poczekam na kogoś z większym doświadczeniem ode mnie. Może coś poradzi.
A skąd my na podstawie trzech linijek kodu mamy Ci powiedzieć, co zepsułeś w pozostałych pięciuset linijkach? CubeMX generuje gotowe projekty dla Eclipse, więc nie wiem czemu konwertowałeś projekt dla Eclipse na projekt dla Eclipse, co zresztą i tak nie ma znaczenia dla odpowiedzi na Twoje pytanie. Nie powinieneś w ogóle ruszać priorytetów przerwań....
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.
Dla CM3 interrupt latency wynosi 12 cykli i może być zaimplementowane do 256 priorytetów przerwań. Stellarisy mają zaimplementowane 8, STM32 ma ich 16, a LPC17xx ma ich 32. I nie ważne z kiedy ten dokument jest, jest nieaktualny. [url=http://ep.com.pl/files/2085.pdf]Lin... Wtedy był jeszcze na papierze, ale dokumentacja do rdzenia była dostępna. w tym...
Witam, Bawię się STM32F1 bez bibliotek wykorzystując książkę "STM32. Aplikacje i ćwiczenia w języku C" i zestaw ZL27ARM. Jestem przy RTC i udało mi się uruchomić. Ale zastanawia mnie grupowanie przerwań. Czytając post http://www.elektroda.pl/rtvforum/topic23... wywnioskowałem, że można użyć funkcji inline z pliku core_cm3.h Chciałbym testowo...
Przy jednej sztuce możesz spróbować zamówić jako sample - przesyłka darmowa. Tak na marginesie, wszystkie sample od TI przechodzą przez ręce firmy Contrans, a oni (przynajmniej ja mam takie doświadczenia) są jak pies ogrodnika. Sample wysłane do mnie utknęły właśnie we Wrocławiu, we wspomnianej firmie, musiałem się nisko pokłonić żeby dostać elementy...
To się przesetań zastanawiać i przyjmij to za pewnik. Dlaczego 8-bitowe stałe do sterowania wyświetlaczem są zadeklarowane jako 32-bitowe zmienne, w dodatku ze znakiem? O priorytetach przerwań proponuję chwilowo zapomnieć - nie myśl o nich i nie ustawiaj ich. Realizację wyświetlania na STM32 znajdziesz w jednym z ostatnich numerów EP.
Zmienne globalne zajmują...... Pewnie ram dla led jest rezerwowany w chwili uruchomienia biblioteki przez memalloc. Gdybyś sam pisał obsługę led to użyłbyś tablicy o określonym rozmiarze dzięki czemu wiedziałbyś ile ram zajmuje program. Poszukaj jak wyświetlić ilość wolnej pamięci ram w czasie działania programu. Jakiś freemem jest. Trochę oszuka ale...
A co jest złego w odczytaniu portu GPIO do zmiennej , zmianie wymaganych bitów i zapisaniu z powrotem do portu wszystkich bitów jedną operacją? 1. Możliwe błędne działanie przy modyfikacji linii jednego portu z dwóch fragmentów kodu o różnych priorytetach (np. pętla zdarzeń i przerwania). 2. Czas wykonania. 3. Rozmiar kodu. Wystarczy?
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);...
(at)_lazor_ Reset Handler Raczej ciężko nazwać to przerwaniem. Stany wyjątkowe, jakim jest NMI i RESET, to przerwania o ujemnym priorytecie. Przerwań tych nie można wyłączyć. w ARM RESET jest przerwaniem.
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ą...
Moim skromnym zdaniem OVR może wystąpić tylko wtedy, gdy równocześnie: - DMA dla TX ma priorytet wyższy niż dla RX (nigdy nie ma takiej potrzeby, więc byłby to ewidentny błąd programisty) - działają inne kanały DMA o priorytetach wyższych niż RX. Wydaje mi się, że niespełnienie pierwszego warunku wystarczy dla wyeliminowania OVR. O ile dobrze rozumiem...
skoro można to rozwiązać bez os i kombinowania na wątkach prosiłbym o jakąś wskazówkę lub przykładowy kod jak wygenerować tą falę prostokątną, bo nadmienię że odczyt temperatury z jej konwersją zajmuje aż 3 sekundy (2 termometry one wire) z resztą to widać w kodzie odczytu temeratury bez os tak samo załączyłem kod generowania fali. Wiem, że z tym osem...
TIM2->ARR=1; TIM2->PSC=0; To oczywiście spowoduje bład DMA o którym pisze poniżej przy drugiej transmisji i przerwanie transakcji DMA Ja używam Nucleo, tam nie mam kwarcu, Masz - sygnał idzie z ST-Linka i w cube iustawiasz jako bypass. Jaki jest procent wykorzystania czasu szyn przy tak częstych żądaniach DMA? Czy na cokolwiek jeszcze zostaje czas,...
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, ...)...
Widziałem w pewnym poscie ostrzeżenia przed or-owaniem, więc pomyślałem, że pisząc całe wartości uniknę problemów. Pokaż linka, sprostujemy (; Przy bardziej zakręconym ORowaniu warto pamiętać o (zwykle zbędnych) nawiasach, żeby nie zastanawiać się niepotrzebnie nad priorytetami - np coś na styl: 0x55 << 3 | 0x12340000 jest równoznaczne temu (0x55...
zegary itp włączone, bo jak mówiłem wszystko chodzi i odczytuje ładnie aż do pewnego momentu gdzie się wiesza. Funkcja odczytu znajduje się w przerwaniu od systicka, a przerwania od timerów maja niższy priorytet wiec nie powinny się wcinać w komunikacje. Jednak jak je wyłączę to chodzi bezbłędnie.
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...
Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Zwyczajnie. Nie wiesz, że dostawca Internetu może blokować dostęp do określonych stron? Rozwiązanie Twoje jest złamaniem zasad bezpieczeństwa. W wielu firmach, gdzie bezpieczeństwo danych jest priorytetem, takie "udogodnienie" jest złamaniem regulaminu pracy. W mojej firmie chyba bardzo poważnym. Aha. Ale w takich firmach ta surowość przepisów jest...
Trochę rozpustnie to napisałem poprawiłem kod jest bardziej zwięzły. O program oczywiście po proszę. Gaskoin - Twój program znalazłem na elektrodzie już wcześniej. Między innymi z niego korzystałem pisząc swój. Rzeczywiście nie wiele się różnią tym bardziej nie wiem gdzie leży problem. Zależy mi na stałym ciągłym pomiarze z dwóch wejść. Grupa Injected...
Procesor to konkretnie STM32F439IGT6. Mam taki kod w mainie: https://obrazki.elektroda.pl/2215514800_... A powinno być tak: https://obrazki.elektroda.pl/3426620100_... Najciekawsze wnioski są jednak po dodaniu tych linii: https://obrazki.elektroda.pl/6540612300_... A tu dla wersji która inicjalizuje...
Oba taski maja ten sam priorytet ? Spróbuj sprawdzić czy przerwanie od SysTiicka działa (breakpoint). Możesz tez spróbować wrzucić tutaj kod, który nie działa (okrojony najbardziej jak to możliwe). Powiem tak, na stm32f105 jeśli dobrze pamiętam to timer działa, a zmiana priorytetów nic nie dawała. Dzisiaj jednak pomęczyłem się z gołym projektem dla...
Koledzy, uczę się na płytce od KAMAMI ZL31 z prockiem STM32F103RB. Idę zgodnie z książka jednak nie mogę uzyskać innego przerwania jak od portu A. Program kompiluje się bez błędów. PB1 PB2 wyjścia PP http://obrazki.elektroda.pl/1242962800_1... Jeżeli debaguje na procesorze to nie jest już OK. W podglądzie przerwań konfiguruje się na...
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...
Witam, Mam pewien problem z usypianiem/wybudzaniem procesora. Chciałbym uśpić procesor na czas wykonania konwersji przez przetwornik. Chciałem do tego celu wykorzystać tryb SLEEP ON EXIT. Rozpoczęcie konwersji wykonywane jest w przerwaniu od Timera, po wykonaniu instrukcji rozpoczynającej konwersję chciałem uśpić procesor, a wybudzić go w procedurze...
1. Przycisków nie obsługuje się na przerwaniach portów. 2. Nie potrzebujesz do tego trzech przerwań - wystarczy przerwania timera i UART. 3. Nie zmieniaj priorytetów przerwań - jeden poziom zdecydowanie wystarczy. Nie potrzebujesz zagnieżdżania, a próbując je zrobić brniesz w ślepą uliczkę, bo 5. Ogólną zasadą jest, że w procedurze obsługi przerwania...
A na jakie pytanie nie uzyskałeś jeszcze odpowiedzi? Czego nie wiesz i do czego jest Ci to potrzebne? Jak się ustawia priorytety - już wiesz - NVIC_SetPriority() albo samemu prawie tak, jak robi to ta nibyfunkcja ale bez bezsensownych przesunięć argumentu - wpisujesz wprost 8 bitw do odpowiedniego rejestru. Każdy rdzeń ma określoną liczbę poziomów priorytetu...
Zacznij od wyrzucenia modyfikacji priorytetów przerwań - zostaw wszystkie na tym samym domyślnym Zamiast NVIC_PriorityGroupConfig i NVIC_Init użyj NVIC_EnableIRQ() - usuniesz w ten sposób błędy i skrócisz kod. Ten warunek też jest podejrzany: USART_GetITStatus(USART_Datalink, USART_IT_TXE) == SET) Prościej i poprawnie jest napisać: if (USART2->ISR &...
Zasadniczy probem twojego rozwiązania to delay() w obsłudze przerwania i ogólnie za dużo w nim robisz. Z zasady w przerwaniu wykonujesz jak najmniej kodu, aby z niego wyjść najszybciej jak się da. A tutaj wykonanie kodu w przerwaniu zależy od kolejnych przerwań. Ustawiaj tam sobie jakąś zmienną globalną kiedy chcesz coś wykonać, wybudź procek, opuść...
Dokładnie tak jak pisze kolega R-MIK. Jak sprawdzałem czas od wykrycia zera do podania sygnału na triak dla uC stm32, to było to około 0,7ms. Więc maksymalny czas załączenia triaka w jednej połówce sinusa to 9,3 ms, więc wystarczająco na dość dokładne sterowanie. Ale dalej nie wiemy co kolega chce z tym robić, więc nie wiemy co będzie lepsze :) Sinus...
I2C jest rygorystyczne czasowo. Inne przerwania mogą powodować błędy. Zrobić I2C na przerwaniach o najwyższym priorytecie. Uchronić przed błędami powstałymi z HOR-PLUG. Np cykliczne pytanie i resetowanie I2C po konfiguracji sprawdzenie flag oraz stanu pinów.
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, walczę z UART i natrafiłem na przeszkodę w postaci odbioru danych (wysyłanie działa). Analizując mój kod przynajmniej teoretycznie powinien działać, ale w praktyce tego nie widać, więc proszę o zdjęcie mi klapek z oczu i wytknięcia błędów. Zamieszczam kod, który ma za zadanie sterowanie diodą w zależności od odebranego rozkazu. Konfiguracja UART...
Ciężko tak analizować kod "na kolanie" ( jestem w robocie). Zobacz jeszcze, czy zanim uruchomisz ten fragment, wykonuje się: [syntax=c]sem_tc = xSemaphoreCreateBinary ();[/syntax] Co do priorytetów w RTOS to chyba to znasz: [url=http://www.freertos.org/RTOS-Cortex... Pozdrawiam, QuadMan
Witam, spotkała mnie sytuacja z której nie mogę wybrnąć. Tzn do transmisji używam I2C, które w kontrolerze przerwań ma priorytet 1 dla obsługi zdarzen oraz 0 dla błędów. Kiedy uruchamiam Timer 17 skonfigurowany jako PWM(to co odczytane zostanie z I2C ma trafić do PWM'a), to transmisja stoi. Od Timera 17 nie generuje przerwań , wiec nic nie powinno zwieszać...
Rejestry BSRR i BRR są tylko do zapisu więc nie trzeba nic innego tylko wpisać 1 na odpowiedniej pozycji. Napisane jest, że BSx ma priorytet przed BRx, czyli jeśli dla tego samego pinu ustawisz tam 1 to w rezultacie pin zostanie ustawiony. Ponieważ są to rejestry tylko do zapisu to modyfikacja wyjść z ich użyciem jest szybsza niż przy użyciu bit bandingu,...
Witam Mam problem z SPI Napisałem program dla mikrokontrolera STM32F103RB taktownego zewnętrznym kwarcem i wszystko dziłało SPI i PWM. Następnie zrobiłem nowy rpojekt na mikrokontroler STM32F101R8 i spi nie działa wcale! PWM działa i inne. SPI1 jest na tych samych pinach w obu procesorach, czy zmiana HSE PLL 24 Mhz na HSI 8Mhz coś zminia w sprawie SPI...
[syntax=c]//-=-=-=-=-=-=-=-=-=-=-=-=-=-=... // Task FreeRTOS - obsluga interfejsu sieciowego //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=... void vTaskEthernet(void * pvParameters) { /* uIP */ int i; struct uip_eth_addr mac_addr; //MAC Address struct...
A jednak udało się ramkę "wystawić" na inny pin. Przegrupowałem priorytety przerwań tak aby timer "symulujący" nie czekał z przerwaniem (brakowało dosłownie paru us aby rozpoczać wysyłanie ramki do urządzenia). Okazało się że najwęższym "gardłem" czasowym nie był sam STM.. lecz czas "wychwycenia" całej ramki danych (tak aby obliczyć CRC). Dziękuję wszystkim...
Równie dobrze możesz na stałe obniżyć priorytet przerwania I2C. Niestety nie mogę, I2C musi mieć najwyższy priorytet. Jeśli nawet przerwę transmisję w debuggerze to mi się zawiesza i nie mogę nawet zresetować czujnika (bo komenda idzie oczywiście przez I2C), jedynie wyłączenie i włączenie działa w tym przypadku. A odnośnie tych bardzo długich czasów...
Witam, Bawię się zestawem ZL27ARM i robię ćwiczenia z książki "STM32. Aplikacje i ćwiczenia w języku C" Jestem przy ćwiczeniu 18 i mam problem z DMA (pierwszy raz mam styczność z DMA). Zgodnie z przykładem wypełnienie PWM powinno zmieniać się od 0 do 100%. U mnie jest cały czas 50%. Dane z tablicy bufor_PWM nie są przekazywane do TIM1->CCR1 http://obrazki.elektroda.pl/9548353800_1...
Daję tylko EnableIRQ i ustawienie priorytetu (ale nie grupy!) pomiędzy configKERNEL_INTERRUPT_PRIORITY a configMAX_SYSCALL_INTERRUPT_PRIORITY - przy użyciu "normalnych" wartości oczywiście (jeśli przerwanie ma gadać z FreeRTOSem). W jednym projekcie jeszcze mam dorzucone na początku main() coś takiego: NVIC_SetPriorityGrouping(0); 4\/3!!
Niestety wciąż to samo :cry: diodka nie miga co 1s. Zaczynam myśleć, że ten kwarc zegarkowy jest uszkodzony. Wystarczy, że zaremuję konfiguracje zegara i program rusza. Tzn to co jest w main{}. Mam jeszcze takie pytanie do Ciebie. Widzę, że nie wybierasz grupy priorytetów. Czy jeśli jest wykorzystywane tylko jedno przerwanie to nie musimy wybierać grup??
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...
Nie trzeba się bawić w udev, jedynie co to dodać linijkę odpowiedzialną za dostęp do urządzenia, żeby nie musieć logować się na roota za każdym razem jak chcemy debugować. Jaja w nowym jądrze (!) wynikały z tego, że sterowniki ftdi ładowane do jądra "nie wiedziały", że urządzenie o podanym vid i pid to urządzenie oparte na ftdi i trzeba było im to jawnie...
Teraz mam problem z przerwaniami od końca konwersji ADC1. Działanie układu wygląda tak jakby mikrokontroler nie wchodził w obsługę uchwytu przerwania od przetwornika ADC 1,2. Konfiguracja przetwornika: void init_adc (void) { // Niezależny tryb pracy // Włączenie przerwań od końca przerwań - EOC ADC1->CR1 = ADC_CR1_EOCIE ; //Wybór czasu...
Nie ma znaczenie czy 10Mb czy 100Mb, to Ty decydujesz jak szybko reagujesz na odpowiedź w zależności od priorytetu zadania, także raczej źle napisany jest program. Jeśli uważasz, że rozwiązanie z ENC ma tą zaletę, że nie masz obawy o to, że zabraknie Ci RAM, to rozwiązaniem jest wybór CPU z RAMem o 16kB większym. Jeśli już zdecydowalbym się na ENC to...
Witam, Ostatnio postanowiłem zająć się licznikami i przerwaniami. To co chcę osiągnąć, to każdorazowe przerwanie po przepełnieniu licznika TIM1. Konfiguracja licznika: [syntax=c] //zliczenie w gore TIM1->CR1 &= ~(TIM_CR1_DIR); //aktualizacja zrodla przerwania (tylko overflow/underflow) TIM1->CR1 |= TIM_CR1_URS; //generowane przerwanie //TIM1->CR1 &=...
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...
Ne wiem, po co do takiego zadania angażować RTOS, chyba, że docelowo ma być tego duo więcej. Skoro wiesz, co i jak trzeba zaprodramować - po prostu zaprogramuj timer, ADC i DMA, obrabiaj wstępnie próbki w przerwaniu DMA, a resztę przetwarzania zrób przez PendSV (obniż priorytet do najniższego), bez pętli głównej. Wiesz calosc dekodowania i wysylania...
priorytet windows huawei priorytet priorytet wiadomości
wkrętarka decker wózek wąż focus sterowanie kierownicy
piekarnik grundig legendford schemat
Satel ACX-210 z AWZ-510 Pulsar – jak poprawnie połączyć moduł i przekaźnik? Canon TS3450 – jaka przetwornica 12V/230V do drukarki atramentowej w samochodzie?