Przerwania są zagnieżdżone,tzn. jestem w przerwaniu od timera, wysyłam wynik z przetwornika do uarta, a potem czekam na przerwanie od przycisku nie wychodząc z przerwania od timera. Gdy wcisnę przycisk to CPU idzie to obsługi przycisku i mam przerwanie zagnieżdżone. Tu nie pomoże żadna wiedza o wielkości stosu. Program trzeba przepisać. A przedtem...
Można włączyć IRQ wcześniej, ale wtedy masz ZAWSZE zagnieżdżone przerwania, nawet jeśli nie ma to sensu (bo po co długie przerwanie miałoby przerywać inne - bardzo krótkie). Jeśli włączasz je dopiero wewnątrz obsługi danego przerwania, to masz nad tym lepszą kontrolę. 4\/3!!
Cóż, teraz widzę że nie zrozumiałem do końca. Zostaw break jak był, teraz doczytałem że nie stosowanie break to mit, którego zresztą zostałem nauczony w szkole... A wracając do twojego pytania, zapoznaj się z debugerem to zrozumiesz dokładnie jak to działa. Break tak czy siak powinien przerwać pętlę for w obrębie której jest zagnieżdżony, a dopiero...
W żadnym normalnym systemie przerwań to samo przerwani się nie zagnieździ W AVR jest to możliwe, a dla większości jest to normalny system przerwań.
Przecież twój kod się nawet nie powinien kompilować, więc jest faktycznie zły :) Jak sobie wyobrażasz zagnieżdżenie ISR? Mieszasz nowe makra (ISR) ze starymi (SIGNAL). Poza tym ATMega nie ma czegoś takiego jak priorytety przerwań. Przerwanie TIMER1_COMPA_vect nie zostanie przerwane, chyba, że jawnie odblokujesz wszystkie przerwania co zapewne doprowadzi...
Najprostsze rozwiązanie - w przerwaniu od czujki uruchom sprzętowy timer. Przerwanie od timera powoduje włączenie alarmu. Jeśli użytkownik wyłączy system przyciskiem, to w procedurze przerwania przycisku wyłączasz timer. Żeby wszystko działało jak trzeba, musisz zezwolić na zagnieżdżone przerwania (czyli żeby ISR od timera mógł się wykonać w momencie,...
W takiej sytuacji wywoła się chyba kolejne zagnieżdżone przerwanie. Zgodzę się, że to jest możliwe, że jedna i ta sama procedura obsługi przerwania może zostać przerwana przez to samo przerwanie jeśli jeszcze się nie zakończyło wykonywać. Jest to możliwe wtedy, kiedy przerwania wywoływane są w małych odstępach czasowych (z perspektywy mikrokontrolera...
Widzę że muszę trochę sprostować. 1. Nawet kosmicznie często wywoływane przerwanie zdąży się wykonać choć by nie wiem jak długo ono trwało, bo przerwania po wejściu w obsługę jakiegoś przerwania są blokowane i odblokowywane są dopiero po zakończeniu się obsługi tego przerwania. Więc twierdzenie że przerwanie nie zdąży się wykonać w ciągu 128us bo samo...
Czepia się, bo wszystkie funkcje (w tym ISR) umieściłeś w main. ISR z natury są globalne, więc nie mogą być zagnieżdżone w ciele innej funkcji.
Tak są sprawdzane przy przyjmowaniu przerwania ale po powrocie z przerwania (RETI) skąd procesor wie jakie przerwanie, o jakim priorytecie wykonuje (ponieważ przerwania mogą być wielokrotnie zagnieżdżone)?
Witam, to co chcesz zrobić wymaga moim zdaniem 2 procesorów, bo obydwa procesy są czasowo zależne, a zwłaszcza usb. Procesor jest zajęty kontrolą odbioru pakietów i jak opisuje ciekawy artykuł o destuffigu nie należy mu w tym przeszkadzać. sei w przerwaniu to tzw. zagnieżdżone przerwanie, bardzo ryzykowne i moim zdaniem nie do stosowania w C, bo nie...
Nie neguję rozwiązania przerwanie-w-przerwaniu, w niektórych sytuacjach jest to rozwiązanie bardzo eleganckie i efektywne, tylko należy pamiętać aby dobrze wyłączać przerwania. Nie popieram natomiast pętli oczekującej w przerwaniu, kod warto przeprojektować względem tych pętli pozbywając się ich - czy to przez automat skończony zmieniając INT1 na przerwanie...
Skoro problem startupa już rozwiązałeś, to może napiszę cokolwiek o tym drugim. Po pierwsze - po co chcesz zmieniać wartość I / F z poziomu kodu? W znakomitej większości przypadków - jeśli nie korzystasz z przerwań zagnieżdżonych - nie ma takiej potrzeby. Przerwania aktywowane są (lub nie) w rozbiegówce przy okazji ustawiania stosów dla różnych trybów....
"obsługa zagnieżdżonych przerwań jest skopana" - czy jest jakaś możliwość obejścia tego problemu jeśli mam włączone kilka przerwań jednocześnie i mogą się wzajemnie nakładać w czasie ?
Tak samo, jak break nie przerwie Ci wszystkich poziomów pętli zagnieżdżonych, tak samo jest z rekurencją. Dokładnie jak kolega wyżej radzi - funkcja musi zwracać wynik, który będzie decydował o przerwaniu każdego z wyższego poziomu po kolei. Np tak: [syntax=c]int f(int a) { if (rand()%a==0) return 1; if (f(a+1)) return 1; if (f(a-1)) return 1; if (f(a))...
A przypadkiem żeby jedno przerwanie przerwało drugie nie trzeba w obsłudze każdego z nich rozpocząć od... włączenia przerwań (bo przecież domyślnie po wejściu do przerwania są zablokowane). Tym sposobem w ogóle przerwania zagnieżdżone mogą działać... 4\/3!!
Czy istnieje u ciebie przerwanie które wymusza dostęp na FSMC, tj. wyświetlacz? Jeśli nie, to nie ma opcji żeby praca FSMC miała wpływ na wykonywanie przerwań...Jeśli tak, to masz błąd w założeniach, bo dostęp do wyświetlacza nie powinien być w ISRrze.... Przerwania się skolejkują wtedy, gdy masz włączonych kilka przerwań i wszystkie wystąpią na raz...
nie pytajcie się mnie o jakieś szczegóły 0. Załatwione :) Ja nie będę pytał. 1. Nie liczenie wcale nie nastąpi. 2. Nie, O będzie miało stale wartość 0. 3. Daje to tyle, że wynik będzie z sufitu. A teraz kilka słów wyjaśnienia: Ad.1. W funkcji main, masz pętlę opartą o while(1). Ta pętla zostanie przerwana tylko brakiem zasilania. Program nigdy nie...
Jakie Bez tego mechanizmu ciężko ogarnąć takie tematy jak zagnieżdżanie przerwań czy zmiana kontekstu po przerwaniu. Idea jest taka, że w twoim przypadku SysTick musi mieć wysoki priorytet (najwyższy w "systemie", w znaczeniu w RTOSie), tak aby tick był regularny i się nie gubił. Przełączanie kontekstu na najwyższym priorytecie zaś jest średnio zabawne,...
Gdyby zostać w IRQ, trzeba by zrobić zagnieżdżone przerwania czyli takie które mogą być ponownie przerwane przez inne IRQ, a to sporo kłopot i ryzyko. Czemu zagnieżdżać, nie wystarczy po prostu poustawiać odpowiednie priorytety przerwań w VIC? Musze ogarnac pisanie tych skryptow w asmie. Bo widze ze bez tego daleko nie pojade. To jakos sensownie opisane...
Hej, Mam pewną wątpliwość co do sposobu działanie przerwań w avr`ach i ich obsługi przez avr-libc 1.4.4. Co się stanie jeżeli w momencie, w którym procesor obsługuje jakieś przerwanie zostanie zgłoszone następne przerwanie. Z dokumentacji zrozumiałem że nie zostanie ono obsłużone od razu ponieważ ISR albo Signal mają wyłączone globalne zezwolenie na...
Witam mam problem z zrozumieniem warunków If w Bascomie ponieważ mam program dość zagnieżdżony więc już sam się pogubiłem .Oto kawałek programu Przerwanie: Incr P If P >= 1000 Then T0 = T0 - 1 T1 = T0 + 2 If R >= T0 And R <= T1 Then If Wylacz = 1 Then Kontrola = 0 End If Wylacz = 1 Else Kontrola = 1 Wylacz = 0 End If If R < T0 Then Incr...
No ale co to ma za znaczenie. Na przerwanie może zareagować szybciej. "Chyba" należałoby sprawdzić, bo nie masz racji przy nowszych konstrukcjach. A co do przerwań zagnieżdżonych, to dałeś się ponieść. Póki korzystasz z kopii rejestrów a nie stosu to do tych 6 (i 12 oczywiście też) cykli musisz małe conieco doliczyć Także w wypadku cudownego Cortexa....
... Jednak dla spokoju mojej duszy jeżeli stworze program w pętli którego będę wyświetlał zmienną na wyświetlaczu LCD to jest możliwe że za którymś razem przerwanie przerwie w „połowie” transmisję danych do wyświetlacza co spowoduje wyświetlenie krzaków na wyświetlaczu tak? Pozdrawiam Jeśli w przerwaniu nie używasz LCD , to NIE MA PRAWA...
w trybie ISR_NOBLOCK może dojść do przepełnienia stosu jeśli przerwania będą się pojawiać zanim bieżące nie zostanie obsłużone. W takich sytuacjach warto sobie wstawić jakiś licznik zliczający zagłębienie wywołań. Tak by było, gdyby przerwanie pochodziło od poziomu niskiego a nie od zbocza albo przerwanie odbiorce USART. Gdy jest przerwanie od zbocza,...
Kiedy zdarza się przerwanie, bit I w SREG zostaje wyczyszczony, podczas powrotu z przerwania RETI ustawia bit I z powrotem na 1. Zapobiega to kolejnemu wywołaniu tego samego przerwania dopóki jego obsługa nie zostanie zakończona, jak i zagnieżdżonym przerwaniom.
Luźne dywagacje to znaczy takie sobie gdybania i rozważania. Czego nie wolno i dlaczego nie wolno, sztuczki i kruczki itp... Temat nie tylko dla mnie, mam nadzieję :) . Na początek konkretne zapytanie. Wywołujemy sobie przerwanie, załóżmy INT1. Wiemy, że dopóki trwa, nie wywoła się żadne inne przerwanie. Możemy sobie jednak włączyć globalne zezwolenie...
Kol. Autor pozwoli że doradzę coś ze swojego podwórka bo w swoim czasie borykałem się z wielopoziomowym menu. W moim przypadku zrobiłem to tak(po drodze założenia): załóżmy że menu ma 3 poziomy z czego ten najniższy kończy się wykonaniem konkretnej procedury a dwa poziomy po drodze to nic innego jak prompt-y których działanie sprowadza się kolejnych...
no zrobiłeś sobie liczbę 3 bajtową 03_84_FFh, czyli 230655. Najbardziej znaczący bajt masz w R18, najmniej - w R16. No i dekrementujesz. Nie do końca natomiast wiem, skąd się doliczyłeś 230400. Chyba, że po drodze wchodzi Ci jeszcze przerwanie i modyfikuje zawartość któregoś rejestru. A to co chcesz zrobić powinienneś (czyli 3x132 itd.) napisać w pętli...
Widzę że się znasz na rzeczy wiec zadam Ci kilka pytań jeśli pozwolisz. 1. Czyli jeśli chcę żeby przerwanie od TB miało najwyższy priorytet to muszę odblokować w pozostałych przerwaniach GIE ponieważ chodziarz to przerwanie w Tabeli jest na wyzszym poziomie nie przerwie mi przerwania np Portu. 2 Czy dobrze rozumiem <bo to mi umsknęło podczas przeglądania...
Procedura obliczenia() musi być wykonana po każdym przepełnieniu timera i tylko po przepełnieniu timera (musi się wykonać dokładnie tyle samo razy ile razy wystąpiło przerwanie timera). Wymagana jest też w szybka reakcja na inne przerwania - szybsza niż trwają obliczenia() Prawie dobre rozwiązanie nr 1(pseudokod): Proszę wytknięcie błędów, opinie który...
Witam forumowiczów, Natknąłem się na pewien problem, z którym nie wiem jak sobie poradzić. Sprawa dotyczy nieprawidłowej obsługi przerwania INT0 podczas wykonywania komend sterujących wyświetlaczem LCD. Do Atmega32 podłączone są: - standardowy wyświetlacz LCD, - źródło impulsów (dokładniej jest to liniał cyfrowy), - przyciski. Impulsy wprowadzone na...
:arrow: pawelj - żeby mieć mniej więcej to co piszesz to musisz mieć tą pętlę w pętli. Tak nie jest. Piszę mniej więcej bo dokładne wyliczenie opóźnienia robi się nieco inaczej. Trzeba uwzględnić wszystkie pętle. Przykład procedury opóźniającej ok. 100ms (kwarc 2MHz) z dwiema zagnieżdżonymi pętlami: czekaj_100ms: ldi R16,255 petla_2: ldi R17,255...
Szum na wejściach raczej nie jest problemem, każde wejście ma wbudowany przerzutnik schmitta. Oprócz tego w trakcie zliczania wykonywane jest całe mnóstwo działań matematycznych, Gdzie są te obliczenia wykonywane? Jeśli w przerwaniu to być może trwa za długo. a chwilowe wyniki obliczeń i pomiarów na bieżąco przesyłane są po RS232 (9600 B/s) do komputera...
To żaden debouncjing, przecież jak drgają styki to masz naprzemienne zbocza narastające/opadające, inaczej byłby to stabilny stan logiczny :) Oczywiście w większości przypadków to nie przeszkadza i można sobie robić na przerwaniach. Problem pojawia się w sytuacji, kiedy inne procedury wymagają niskiego, albo chociażby przewidywalnego czasu reakcji na...
Zdefiniuj czym są atomiczne(/atomowe) przerwania? Procesor albo skacze do ISRa albo nie . (pomijając zagnieżdżone przerwania) Nie ma takiego pojęcia jak "atomowe przerwania" i nie zamierzam go definiować. Napisałem, że " W AVR'ach przerwania są atomowe względem ", czyli całe przerwanie domyślnie można traktować jako sekcję krytyczną zarówno względem...
Niedawno zrobiłem mały egzamin tej 'inteligencji', marnie wypadła ze znajomości avrów ;) (nie można zagnieździć bold w code, więc będzie rozlazłe) procesor avr ze stosem sprzetowym ChatGPT Procesory AVR, takie jak te z rodziny ATmega, są wyposażone w stos sprzętowy, który jest używany do zarządzania wywołaniami funkcji, przerwami oraz przechowywaniem...
Szukasz najczęściej występujące "piątki" w totolotku?? :) Do tego tematu można podejść na kilka sposobów, zależy, jak szybki musi być "algorytm". Ja spróbowałbym tak: na wstępie posortował liczby w pliku rosnąco, ew.wygenerował z nich nowy, posortowany plik. Następnie dwie zagnieżdżone pętle for (albo for i while ) - pierwsza pętla odczytuje kolejne...
ldr pc, [pc, #-0xFF0] spowoduje ze pc ustawi się o -0xff0 wcześniej? Adres IVR(IRQ Vector Register ) to 0xFFFFF100. Mógłbyś mi to wytłumaczyć? Od "aktualnej" wartości PC (w przypadku przerwania IRQ jest to 0x20 - wynika z pipeline'a) odejmujesz to co tam masz i wyjdzie adres rejestru kontrolera przerwań podającego adres odpowiedniej funkcji....
To tylko potwierdza, że tym bardziej nie należy tego używać w przerwaniu ze względu na czas trwania zagnieżdżonych funkcji. Czas trwania wykonania funkcji update() będzie w tym wypadku niewspółmiernie mniejszy niż czas, co jaki należałoby wykonać przerwanie dla jej wywołania. Nie wiem skąd się bierze ten upór do czytania dokumentacji do frameworka...
Witam! Na wstępie chciałem zaznaczyć, że od niedawna dopiero poznaję procesory z serii ARM. Bardzo dawno temu miałem styczność z 51- jedynką i keilem. Moje doświadczenie w programowaniu C też nie jest oszałamiające, natomiast asembler na ARM jak na razie jest przeze mnie mało zrozumiany. Proszę o wyrozumiałość przy pisaniu ewentualnych odpowiedzi, za...
Obserwuję te zmagania od pewnego czasu i pozwolę sobie na wtrącenie kilku zdań. (at)joik123 Wyobraź sobie taką sytuację: Każdego dnia o 6:00, 18:00 i 22:00 Twój pies potrzebuje wyjść na spacer. Jak nie zdążysz, to może być problem. Analogia do tego tematu jest taka, że jeżeli chcesz używać delay, to tak jakbyś przez cały dzień obserwował zegarek, odliczał...
W Zmienne globalne — wiedz, kiedy są modyfikowane Zmienne globalne muszą być ostrożnie obsługiwane, gdy są używane z przerwaniami, ponieważ te są generalnie asynchroniczne. I jeżeli zmienna globalna jest modyfikowana przez ISR, może zostać zmieniona w dowolnym momencie. Musimy mieć na uwadze następujące aspekty: Odczyt/zapis zmiennych globalnych...
instrukcja SEI na początku ISR, avr-libc to załatwia Dla ścisłości, powinieneś użyć: ISR(XXX_vect, ISR_NOBLOCK) { ... } bo wpisanie na początku obsługi przerwania sei(); to nie to samo. Wtedy przerwania zostają włączone dopiero po prologu, czyli np. po odłożeniu na stos używanych rejestrów - to wprowadza pewne opóźnienie. Wiem - to...
Witam. Parę pytań, przemyśleń, proszę o wypowiedzenie się. Temat dotyczy programowania embedded C głownie mikrokontrolerów raczej większych 32 bitowych. 1. Stosowanie wielu zmiennych globalnych jest bee Czy w świecie embedded bez dynamicznej alokacji pamięci da się inaczej? Zakładając, że mamy jakieś stałe duże struktury globalne (zawierające mnóstwo...
Witam, próbuje znaleźć dobry sposób na pomiar amplitudy impulsu PWM. Zakres zmian wypełnienia 5 % do 95 %. Czestotliwosc sygnalu sie nie zmienia i wynosi 1 KHz. Mój pomysł polega na tym, że po wychwyceniu zbocza narastajacego odpalam ( w przerwaniu od input capture) timer ktory co 10 us ( 5 % z 1 ms to 50 us) trigeruje pomiar ADC poprzez DMA (czyli...
Żeby pisać na mikrokontrolery w C++ trzeba znać ten język bardzo dobrze. Niestety mikrokontroler to nie PC i nie "wybacza" nieprzemyślanych konstrukcji, które kończą się alokacją ogromnych ilości pamięci. Tak konkretniej to chodzi mi o nieprzemyślane używanie klas. C na mikrokontrolery jest znacznie łatwiejszy. A mógłby ktoś napisać w C++ i w C program...
kolego atom1477 --> zanim zaczniesz komuś zarzucać, że gada bez sensu - to może najpierw przyjrzyj się swoim wypowiedziom i poradom ogólnym jak choćby o tym, że wszyscy używają starych bascomów to dlatego opowiadasz o max 255 dla waitms .... mógłbym tak cię co chwilę łapać za słówka - ale nie o to chodzi To akurat nie była porada ale stwierdzenie....
(at)osctest1 Dlatego z ULA na jednym procku raczej nie przejdzie. Obraz musi być generowany co do taktu, na zwykłym AVR samo przerwanie będzie zbyt kosztowne (w Spectrum ULA pracuje równolegle do CPU). Na XMEGA, z DMA myślę, że by dało radę, ale to musiałbym przemyśleć, niewykluczone, że trzebaby użyć jakiegoś glue logic, w celu uzyskania koloru,....
To już zalezy czy zezwalacz na zagnieżdżanie przerwań. W momencie wejścia do procedury obsługi przerwania, global interrupt enable (czy jak się to nazywa w twoim przypadku) jest wyłączany. Oczywiście, w pierwszej linii obsługi przerwania możesz je odblokować, i wtedy koljne przerwanie może przerwać wykonywanie aktualnego. Niektóre kontrolery mają też...
funkcja zagnieżdżony pętel zagnieżdżony excel zagnieżdżony
bezpiecznik napęd połączenie silnik pralka zwiększyć dawka paliwo
wentylator sufitowy wentylator sufitowy schemat
Rezystancja potencjometru we wzmacniaczu audio Rezystancja potencjometru 2x47k M+N w centralnym położeniu