Chciałbym jeszcze coś dodać, bo moim zdaniem zapotrzebowanie na RAM to nie jedyny problem w przypadku zagnieżdżania przerwań. Nie znamy programu, więc trudno przewidzieć, czy sprawa dotyczy tego konkretnego przypadku. W przypadku zagnieżdżania przerwań należy jednak pamiętać o pewnych zasadach. Procedury obsługi przerwań, które ustawiają globalną flagę...
A tu zonk. ;) Na gcc 4.9 prerelease (Linaro, do zassania stąd https://releases.linaro.org/latest/compo... C11 działa już ok, na BET i wszystkich starszych (<4.9) rzuca błędami o typedefach w formie funkcji. Nie wiem na ile bezpiecznie mogę używać tego 4.9, ale nie robię sterowania dla elektrowni atomowej, także raczej tragedii...
U mnie (Katowice) z DCF77 nie ma problemu, oczywiście zdarza się, że przez jakiś czas nie działa, ale przecież nie musi - wystarczy że złapie sygnał od czasu do czasu. Z tego co zauważyłem, to strasznie przeszkadza w odbiorze DCF77 komputer. Kiedy miałem zasilane układy przez USB to generalnie był problem, gdy je zasilałem osobno - z sieci lub z baterii...
Nigdzie nie widzę definicji PINCx, a więc zakładam domyślne pochodzące z avr/io.h (iom8.h): /* PINC */ #define PINC66 #define PINC55 #define PINC44 #define PINC33 #define PINC22 #define PINC11 #define PINC00 Tak więc są to stałe zdefiniowane jeśli dany pin istnieje, zawierają numer bitu który należy sprawdzać. Nie są to marka do sprawdzania stanu pinu...
Dziękuje za odpowiedź. Tak to by się zgadzało, że za odpowiedni kod odpowiada w tym przypadku odpowiednia konfiguracja kompilatora. Czy mógłbyś zasugerować jakie ustawienia (oprócz oczywiście stopnia optymalizacji) należałoby wprowadzić w kompilatorze aby wygenerować taki "atomowy" kod jaki uzyskałeś. Samo włączenie optymalizacji (-Os) za bardzo mnie...
Witam serdecznie wszystkich! w końcu postanowiłem się podzielić czymś ciekawym. Obsługa kontekstu run-as dla złożonych scenariuszy🛡️ # Zrzut chronionego procesu lsass kvc dump lsass # Usuń ochronę ze wszystkich procesów kvc unprotect all # Wyciągnij klucze DPAPI i hasła kvc dpapi extract # Lista wszystkich chronionych procesów z kolorami kvc list #...
To oni sprowadzają LNG z drugiego krańca świata? Chyba nie, droga LNG płynącego do Azji lub Europy jest zdecydowanie krótsza. Nie wiem czy sprowadzali, wiem że w Sachalin zainwestowali. Aktualnie w związku z wojną i sankcjami rosyjskie spółki odkupiły udziały Shell'a. Co z japońskimi to nie wiem, nie śledziłem tematu. Pamiętam, że gdy inwestowano w...
https://obrazki.elektroda.pl/2220939900_... Mikrokontrolery AVR cieszą się niezmienną popularnością, ze względu na swoją prostotę, a jednocześnie spore możliwości. Co ciekawe, mimo, że od lat wszyscy wieszczą rychłą śmierć mikrokontrolerów 8-bitowych, mają się one ciągle dobrze, a kolejne, nowe rodziny są wprowadzane na rynek. Jakiś...
Źle obsługujesz enkoder. Poczytaj o enkoderze kwadraturowym - enkodery nie działają tak jak założyłeś, że na jednym pinie masz impulsy jak kręcisz w jedną stronę, a na drugim, jeśli kręcisz w przeciwną. Używają najczęściej kodu Gray’a - więc zacznij od poprawnej obsługi enkodera. Druga sprawa - wewnętrzne podciąganie zapewnione na portach ma zbyt dużą...
A możesz sprecyzować pytanie? Najogólniej istnieją, dzięki specjalnym instrukcjom, np. XMEGA ma instrukcje LAS, LAC i LAT umożliwiające atomową modyfikację bitów pamięci. ARMY zapewne mają podobne instrukcje. Obie rodziny mają specjalne porty umożliwiające atomowy dostęp do IO.
Zmienne globalne powinny być modyfikowane tylko w kilku koniecznych obszarach wewnątrz programu. Gdyż, jeśli odbywa się to w oparciu o wiele wątków (tj. poprzez główny proces, ISR i inne funkcje sprzętowe, takie jak DMA w mikrokontrolerze), istnieje ryzyko uszkodzenia zmiennej w pamięci. To ryzyko zawsze istnieje, jeśli niepoprawnie odwołujemy się...
Wątek nie ma swojej przestrzeni adresowej. Wątek posiada tylko odrębny stos na zmienne lokalne. Prawdopodobnie Twoim problemem jest synchronizacja wątków i atomowy dostęp do zmiennych.
Po pierwsze, o czym już ci kiedyś pisałem - enkoder koduje pozycję w kodzie Graya. Aby więc uzyskać informację o zmianie położenia enkodera musisz zdekodować sygnał. Nie muszę dodawać, że czynisz to źle. Kolejna sprawa - musisz zadbać o atomowy dostęp do zmiennej pozycja0enkodera - volatile nie załatwia wszystkiego. Dostęp do tej zmiennej z poziomu...
BoskiDialer : rzeczywiście były dość częste zmiany w opóźnieniach, ale zmieniłem zmienną time na 8bitową i teraz wszystko jest OK :). A jak się robi atomowy dostęp do zmiennej?
Tak przy okazji tematu jeszcze ;-) Jak rozumiem za pomocą bitbandingu można sobie zorganizować lepszy dostęp do flag programowych niż za pomocą pól bitowych? Tzn. bez R/M/W? Dokładnie tak, w 100% atomowy dostęp. Oczywiście 1 bitowa wersja flag, bo pola bitowe jak wiadomo bywają wielobitowe ;)
Dobrze kombinuję? Dobrze. Czyli jak wyłączę przerwania przed modyfikacją (asm ("di")), dokonam modyfikacji, a potem włączę, to nie ma prawa się nadpisać, tak? tak Czyli co - lepiej w tej sytuacji byłoby korzystać ze zmiennych globalnych zamiast pól bitowych? Trochę marnotrawstwa, ale większa pewność? Musisz mieć po prostu atomowy dostęp (; Czyli albo...
W przedstawionym przez ciebie przykładzie istotnie można zapomnieć o atomowości i volatile. Jest to jeden z wyjątków o których pisze kol. Freddie Chopin. Jednak zawsze warto dokładnie przemyśleć mechanizm dostępu do danych. Z drugiej strony - być może atomowy w takiej sytuacji będzie musiał być dostęp do samego wskaźnika. Jeśli będzie on na AVR 2-bajtowy,...
Wyliczenia są mniej więcej poprawne - mniej więcej, bo dla dokładnych wyliczeń należałoby uwzględnić opóźnienia wprowadzane przez wykonywanie programu. Dla dokładnego samplowania używa się np. timera, niemniej przy zewnętrznym ADC jitter kilku taktów i tak będzie. Przekłamania wyniku mogą byc spowodowane np. sposobem dostępu do zmiennej wynik. Skoro...
Z perspektywy tej dyskusji wyjaśnia się cel stosowania przez niektórych producentów pary rejestrów do ustawiania/ kasowania bitów, mimo bit bandingu. Przykładowo PIOx_BSRR/BRR u ST. Konsekwentne pociągnięcie dalej i mapowanie każdego rejestru na REG_CLR, REG_SET i REG_INV jak mają PIC32 wydaje się więc logiczniejsze jako sposób na atomowy dostęp do...
Moim zdaniem różnice są ogromne. Nawet nie chodzi o peryferia jako takie, tylko konsekwencję w dostępie do nich. Wszystkie peryferia masz powielone na każdym porcie, każde jest obsługiwane tak samo. Rejestry opisujące peryferia masz pogrupowane w struktury, dzięki czemu możesz przekazać adres bazowy, a te same funkcje będą operować na dowolnym porcie...
Proszę bardzo lecz jetem pewien, iż nie wniesie to nic. Skoro tak twierdzisz, to po co w ogóle pytać? Masz błąd o którym Ci pisałem. Tyle że wtedy pisałem, że "warto na przyszłość", a teraz mówię że masz błąd. To: if (tflags & USART_FLAG_TXE) wykona się niezależnie od tego czy masz włączone przerwanie czy nie. A wiec występuje u Ciebie (jednak)...
Zdaję sobie z tego sprawę. Zdaję sobie także sprawę że jeśli ktoś jest dłużej w temacie to niektóre rzeczy wydają mu się trywialne. Inaczej jest gdy ktoś zaczyna i co chwile ma pod górę. Dobra jest wtedy jakaś konstruktywna podpowiedź. Na stronie 142 : I/O data bitwise handling . Z którego wynika co napisałem w poprzednim poście. Do kasowania / ustawiania...
Rozumiem że w trybie freeruning częstotliwość próbkowania będzie taka sama? Pamiętaj też, że przy zmiennych do których dostęp nie jest atomowy (np. uint16_t) istnieje konieczność zapewnienia atomowości przy możliwym jednoczesnym dostępie z dwóch wątków (gównego i ISR). Także dostęp w kodzie programu do adc_data powinieneś zamknąć w ATOMIC_BLOCK. tzn....
Nie za bardzo rozumiem o co chodzi z tym ATOMIC_BLCOK po prostu w trakcie odczytu może się ona zmienić i jej wartość będzie zła. Dlatego trzeba tak zrobić aby przerwania, inne procesy lub sprzęt nie mogły jej zmienić w trakcie dostepu - to się nazywa dostęp atomowy http://preshing.com/20130618/atomic-vs-n... czyli mówiąc inaczej aby...
(at)marek-czarny Programowanie nie jest dla osób szybko się irytujących. Rozwiązując problem, rozwiązuje się go po kolei. Obsługa LCD wprowadza znaczące opóźnienia, zapewne w kodzie tych funkcji masz delay lub oczekiwanie na jakiś stan. Efektywnie odpowiada to sytuacji w której delay, w dodatku losowy, wpakowałbyś do pętli głównej. Może tego nie dostrzegasz,...
Zastosuj dwa bufory. Jeden do odbierania danych w przerwaniu, a drugi do pobierania znaków do wyświetlenia na LCD. Teraz po odebraniu jednego ciągu LCD zaczyna wyświetlać co trwa z 50ms. Jeżeli podczas wyświetlania zacznie przychodzić nowy text to zacznie on nadpisywać bufor i na LCD będziesz miał krzaki. Więc zastosuj dwa bufory. Odbieraj do jednego....
Cześć, Mam drobny problem. Chciałem na szybko wykonać sobie tester silników krokowych. Użyłem tego co pod ręką wygodne do szybkiej realizacji testera (a że armata na wróble wyszła to mało istotne). Na panelu tft jest sobie slider do regulacji prędkości (parametr speed w zakresie 0-500). Dalej wpisuję ten parametr do rejestru OCR3 w taki sposób: OCR3...
Przeczytaj mojego posta wyżej. Jeśli chcesz sobie brnąć dalej w pola bitowe, to proszę bardzo. Traktuj moje posty jako ostrzeżenie dla szerszej publiczności, która na podstawie dwóch spojrzeń będzie sobie sama mogła zdecydować czy woli kod który używa jednego bajtu mniej i zajmuje więcej flash (a do tego najeżony jest problemami data race), czy może...
Powrót małorolnego człowieka, a moderator burdel teraz zrobił. Zamiast zostawić potrzebne posty, to temat przeniósł do ??? Jaki mikrokontroler wybrać do... ??? Co to ma wspólnego z założonym tematem ? Jakiś nieogarnięty w temacie... Tylko spójrzmy na to obiektywnie - co kolega tymon_x sprawdził ? żeby nie było niedomówień! Otóż sprawdził (przepraszam...
Const jest tylko dodatkiem, niekoniecznym z punktu poprawnego działania podstawowych przykładów . Podobnie jak kontrola błędów i dostęp atomowy - można pomijać wg uznania. I nie zawsze działa jak się wydaje ( np avr). I ten przykład ma dowodzić czego w kontekście bloga który jest nastawiony na ARM? Na początek nadmiar dodatkowych słów kluczowych nie...
Większość powyższych porad jest kompletnie błędna. Przede wszystkim, jak już zauważyłeś, podejrzenie, że problem wynika z jednoczesnego złoszenia dwóch przerwań można między bajki włożyć. Każde przerwanie ma swoją flagę i przy jednoczesnym zgłoszeniu dwóch przerwań, jedno (o wyższym priorytecie) jest obsługiwane, a obsługa drugiego jest odwlekana do...
A teraz obliczenia: Taktowanie procesowa 1MHz, preskaler 8 daje 125kHZ co przekłada się na czas impulsu równy 0,000008s . Ustawiając OCR2 na 200 nasze przerwanie będzie wykonywać się co 0,0016s co daje 625 przerwań na sekundę Problem w tym, że najprawdopodobniej bardzo rzadko spełniają się warunki porównujące wartości liczników w ifach czyli odswiez_wyswietlacz==312...
Pętli się dalej. Przerwanie jak sama nazwa zskazuje przerywa wykonywany kod, realizowany jest kod przerwania, po czym powrót następuje w dokładnie w to samo miejsce - czyli do pętli. Natomiast to co chccesz zrobić wcale nie wymaga przerwań, a nawet zrobienie tego na przerwaniach byłoby niepotrzebnym kłopotem. Poczytaj o wskaźnikach, w tym wskaźnikach...
do zmiennych takich jak PORTx, PINx,DDRx podchodzi się w sposób bitowy (atomowy) Tak dla ścisłości atomowy IMHO nie oznacza dostępu bitowego. Mówimy o jakiejś operacji, że jest atomic (atomowa) jeśli jest niepodzielna, nieprzerywalna.
Bo to bardziej skomplikowane jest - ty chcesz od tyłu wprowadzić multitasking. A to nie takie proste. Albo zrób obsługę silnika na przerwaniach, a w programie głównym modyfikuj tylko flagi sterujące wykonaniem kodu w przerwaniu, albo zmień menu tak, aby wysyłało komunikaty do kolejki. Zawsze przy takiej okazji polecam: http://www.sics.se/~adam/pt/...
'Działa od 30rpm do 300000rpm $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Timer1 = Timer , Prescale = 64 Config Int0 = Rising Dim Flaga As Byte Dim Text As String * 10 Dim Wynik As Single Dim Zmienna As...
Takie samo? To czemu w pierwszej linijce przesuwasz o 0 pozycji, a w drugiej o 16? Dla jednego to żadna różnica, dla innego będzie to problem i dodatkowy kod. Każdemu według potrzeb. Poza tym naprawdę nie rozumiem problemu - nie chcesz to nie używaj, przecież nie płacisz za to żadnych dodatkowych pieniędzy. Ktoś będzie chciał użyć - użyje. Ktoś nie...
Chodzi o to, że zmienna volatile cały czas odczytywana jest z pamięci i ładowana do rejestru a zmienna bez volatile, ładowana jest tylko raz? Czy dobrze myślę? Dobrze myślisz. Ogólnie zmienna globalna volatile ma sens w sytuacji, gdy ze zmiennej korzystasz jednocześnie w programie głównym i w procedurze obsługi przerwania. W Twoim przypadku, gdy korzystasz...
Zmiana optymalizacji na O2 usuwa problem w każdym z przypadków. Tak samo zrobienie static tego longa problem rozwiązuje, również przy optymalizacji O1. na O1/2, natomiast słychać pyrkanie i inne niepokojące objawy w dźwięku. Z opisu wynika, że masz coś nie tak w programie, niestety bez wnikliwego przejrzenia całości nie ma szans, aby ci pomóc. W pewnych...
Przy okazji zapytam: może mi ktoś wyjaśnić co oznacza bit-banding? Bo z dokumentacji STMa nie mogę do tego dojść. I jeszcze dostęp atomowy, bo według nich to dostęp do pojedynczych bitów, a zawsze myślałem że to operacje nieprzerywalne.
W dalszym ciągu uważam że energii odnawialnej mamy pod dostatkiem tylko trzeba odsunąć pazerność koncernów i odblokować dostęp do wiedzy na ten temat
Popatrz na atxmegę, też na nią przeszedłem i jest to nowa jakość, peryferii full, zegar łatwo ustawić, fuse bity nie straszą, 3 poziomy przerwań, timerów full no i eventy, na tym można cuda robić. Ale Xmega, w stosunku do ARM są drogie i mają mało RAM. Nadal to 8-bit przez co trzeba walczyć z atomowym dostępem do zmiennych 16 czy 32-bit. Nie ma też...
[syntax=C]GPIOE->ODR ^= GPIO_Pin_8;[/syntax] To jest zła praktyka. RMW na rejestrze ODR to proszenie sie o kłopoty, a juz w szczególności, że to się robi w przerwaniu. Po to są odpowiednie rejestry do atomowego dostępu do pinów, żeby nie praktykować RMW. [syntax=C]GPIOE->BSRR=(GPIOE->ODR&...
Pokaż przynajmniej jak wygląda to wyświetlanie. Pamiętasz, że do twoich zmiennych w programie musisz zapewnić dostęp atomowy, poprzez zastosowanie sekcji krytycznych? Akurat w przerwaniach przypadkiem robi się to automatycznie, ale w pętli głównej programu już nie.
p.s. W systemach wbudowanych raczej unika się deklarowania zmiennych jako int. Najlepiej deklarować zmienne jako uint16_t, int8_t itp. W systemach 8-bitowych użycie zmiennej typu uint16_t nie gwarantuje atomowego do niej dostępu.
Trochę nie na temat, ale nie uważasz, że nowe Megi to pudrowanie trupa? Chodzi o stosunek ceny do możliwości. Nie dziwię się, że Mega nie ma DMA, bo i niby po co? Gdzie stworzyć bufory dla DMA, np w przypadku LCD? Jak sensownie wykorzystać RTOS? Na te zadania potrzeba RAM. Jedyny sensowy Mega to 1284 z 16kB RAM. Tam DMA coś by dało a tak mamy przerwania...
Witam czy ktoś potrafi podać przyczynę dlaczego zmienna "czas" raz przyjmuje wartość 1000 a raz 768 w tym programie? Problem tkwi w tym, że nie zapewniasz atomowego dostępu do zmiennej czas (inkrementowanej w przerwaniu) podczas porównania: Zmienna czas jest tu porównywana ze stałą 1000, która hexadecymalnie jest równa 0x03E8. Jeśli zmienna ma wartość...
No dokładnie, o poolingu zapomnij. Najprościej zrobić tak jak pisze Mirek, bufor (niekoniecznie cykliczny), ale po prostu tablicę zawierającą wskaźniki do kolejnych komunikatów. W procedurze obsługi przerwania TX, wysyłasz bieżący komunikat, jeśli wysyłka jest zakończona to sprawdzasz czy w tablicy jest jakiś oczekujący i rozpoczynasz jego wysyłkę....
nie mowimy o reaktorze atomowym tylko o domowym urzadzeniu. co do tego pudla, to jesli suszarka z PC miala by dostep do powietrza z pomieszczenia, i podpiety odplyw do kanalizacji to moze sobie byc zamknieta w czym tam mialbys ja ochote zamknac- jesli zablokujesz wlot powietrza to tak, wylaczy sie i bedzie wolac o czyszczenie filtra.
Wydaje się być oczywiste... Chodzi może nie tyle o atomową prędkość, co bezpośredni dostęp do każdego bitu. To makro w takim razie nie ma prawa występować w programach gdzie dostęp do portów odbywa się z kilku poziomów set i clr działają na podobnej zasadzie jak toggle czy właśnie bezpośrednio pracują na konkretnym bicie?
dostęp atomowy atomowy dostęp bitowy atomowy protest
manipulator risco wymiana kondensatorów zasilacz wzmacniacz cisza
interfejs multidiag electrolux mruga start
Saeco Lirika – lokalizacja czujnika otwartych drzwi, mikrowyłącznik, reed-switch Webasto Air Top, Thermo Top – wymiana sitka palnika i pompy, objawy zużycia, procedura serwisowa