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 sytuacjach różnice w szybkości wykonywania programu pomiędzy -O0, a -O2 mogą przekraczać 50%. Jeśli tak napisany kod migający LEDem w pętli głównej, ma różnice w czasach wykonania 11-20s, to masz powaźnie skaszaniony kod....
Gorzej, jeśli algorytm tego nie gwarantuje - a ja właśnie takie urządzenia ostatnio głównie robię. A jaka jest różnica, czy nie nadąży na przerwaniach, czy przez DMA? ;] Jak nie nadąży, i tak któreś dane musisz zadeptać, albo przyblokować nadawce RTSem. A to może robić supervisor, którego częstotliwość odpalania jest już tylko zależna od głębokości...
odpaliłem sterownik ze strony producenta o nazwie Firmware polling rate adjustment to 500Hz, przestała działać po 5s i wyłączyłem instalator. To nie sterownik a oprogramowanie układowe - czytaj co pobierasz - był zapewne pasek postępu a Ty przerwałeś.
Tak się tego nie robi - nie przerwanie ale polling mode - sprawdzasz stan bitu w pętli i zgrywasz dane - wtedy masz w pełni kontrolowana sytuacje i możesz wyliczyć czas trwania instrukcji - alternatywnie możesz zrobić to sprzętowo - inny temat. Dobrze byłoby gdyby gdyby źródło zegara dla CPU i tego co zgrywasz pochodziło z tego samego miejsca.
Odbiór danych nie przez polling tylko poprzez przerwanie z wektorem TIMER0_OVF_vect Ciekawa koncepcja, ale to chyba jednak polling? Otwarte pozostaje pytanie jak często. Jeśli w kodzie jest więcej takich kwiatków to jednak bez całości kodu wgranego w procesor nie spodziewaj się pomocnej odpowiedzi. Albert
A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
To co- wtedy gdy jest polling to wyłączasz obsługę przerwania? Przecież polling jest stale- jak można wtedy wyłaczyć obsługę przerwania. A jak w trakcie pollingu wejdzie przerwanie- to w maliny. Albo jedno albo drugie. Ja Ci radzę- rób jak uważasz.
To semafora nie popchnę? to ja nie chcę tak:] Niestety nie (; Zasadniczo używanie dowolnej funkcji samego RTOSa jest wtedy zabronione i nic ciekawego się nie da na to poradzić wprost. Interfejs przerwanie <-> wątki trzeba wtedy zrobić jakoś cudacznie, np. przez polling.
W takim razie rozwiąż to inaczej - skonfiguruj przerwanie zewnętrzne tak, aby było wyzwalane zmianą stanu i osiągnij ten efekt w ten sposób - polling pinu to w tym przypadku moim zdaniem nie jest najlepsze rozwiązanie.
A jaka to będzie różnica, czy robi to przerwanie a program sam nic, czy robi to program a przerwanie nic? Poza tym przerwanie realizuje przyciski zmiany godziny, żeby to miało ręce i nogi trzeba polling robić w równych odstępach czasu, program główny tego nie gwarantuje, musiałbym używać delay. Po zmianie godziny przyciskami trzeba przeprowadzić aktualizację...
Nie mogę się zgodzić, choćby dlatego, że można do tego zaprząc DMA i mikrokontroler nie będzie musiał NIC robić. Wersja "manualna" - przerwanie od ADC albo polling i wpisanie na port - też spokojnie by wyrobiła moim zdaniem. Ale z czym się nie możesz zgodzić? Że ledwo zapewnia? Napisałem tak bo zapewnia tylko przy określonej częstotliwości zegara (28MHz...
Program ma wysyłać "powitanie" na port szeregowy. Kompilowany przy pomocy Winavr + avr studio(w najnowszych dostępnych wersjach). Bez optymalizacji wysyła "Witam" ale tylko raz, a powinien dwa razy. Po włączeniu optymalizacji nie wysyła nic. Gdy robiłem transmisję przez polling wszystko było ok. Przerwanie włącza makro TXON; . Dzięki Plik iom16.h /*...
Jesli transmisja ma być nieblokująca to polling odpada. Jak rozumiem można podłączyć modem tak, że po wykonaniu rozkazu dostaniemy przerwanie (również gdy coś się nie powiedzie). Wtedy wg. mnie trzeba zrobić bufor (np. cyrkularny) do którego będzie wpisywać pakiety główny program i inicjowac transmisję. Przerwanie będzie sprawdzało status, zdejmowało...
Chodzi mi, o to że ustawiamy (można powiedzieć podciągamy, bo w anglojęzycznych opracowaniach nazywają to tryb polling czy pullup-nie pamiętam dokładnie-może mi się tak wydaje) wyjście SDO w stan wysoki i oczekujemy na stan niski, którego pojawienie się na SDO sygnalizuje, że kolejka FIFO została zapełniona znakami. Pull-up i polling to dwie kompletnie...
Tak, ale ta hierarchia to chodzi tylko o to, że jeżeli wystąpią dwa przerwania na raz, to jedno wykona się pierwsze (to o niższym adresie) a drugie później. Nie jest to hierarchia, że przerwanie 1 jest niżej od 2, więc 2 może przerwać 1, ale 1 jest wyżej od 3, więc może je przerwać, a samo nie zostanie przez 3 przerwane :D, wiem skomplikowane. Zawsze...
Trochę sobie skomplikowałeś życie. - czy zmienne używane w przerwaniu (te, które również są) są volatile? - co to za wersja RTOSa bo chyba jakaś przedpotopowa :) - po co Ci taka kontrola przepływu ? Działa to teraz tak samo jakbyś nie używał przerwania w ogóle a wprowadza tylko zamieszanie. Funkcja i tak czeka aż się przerwanie skończy, więc czemu nie...
Timer- np. Timer1- jako licznik zlicza impulsy zewnętrzne. Podane na odpowiednią końcówkę- T1 w wypadku ATmega8. Nie potrzebuje żadnego preskalera- bo preskaler dzieli impulsy z zegara- a tu nie ma co dzielić. Ustawiamy bity CS10-CS12 na external clock source- falling lub rising. Czy ustawiamy końcówkę T1 jako wejście- nie pamietam. Można ustawić. Ilość...
Przecież wystarczy sprawdzić flagę źródła przerwania przez polling, co będzie tak samo skuteczne w sensie czasu, a nie będzie zbędnego wejścia i wyjścia z ISR, przerzucania danych na stos i nie będzie tej nieszczęsnej zmiennej globalnej zadeklarowanej jako bit flag. Pamiętaj że każdy procek będzie miał inaczej zrealizowane przerwania, cortex-m zrzuca...
jak masz magistrale to zrób polling urządzeń przez atmege sprawdzając co mają do powiedzenia ciekawego. nie jestem pewien czy na 100m cokolwiek zadziała, ewentualnie tranzystor PNP i ściąganie bramki do masy ... ale też mi się wydaje że nie będzie działać :)
Sformatuj kod i zapisz bez udziwnień. rady co do -CS masz powyżej. Ustaw DMA do odbioru danych - dostaniesz przerwanie po zakończeniu transmisji, Podczas programowania kanał DMA musi mieć wyzerowany bit EN - zapisz 0 do CR na początku programowania. Proponuję jednak zacząć od uruchomienia kodu bez DMA.
Pytałem na samym początku o jakim uC rozmawiamy i dostałem odpowiedź, że problem jest ogólny. A to nie jest prawda. Problematyczny jest przypadek szczególny, niedoróbka ze strony Atmel'a. 5 czy 6 cykli zegara na synchronizację? Dramat. Może mało wiem i mało widziałem, ale żaden inny uC oparty na rdzeniach Cortex-M nie ma takich cudów.. Konstrukcje oparte...
Przerwanie do debouncingu styków to jest takie sobie. To nie jest sygnał o jasno określonej szybkości narastania zbocza. W przypadku takiego sterowania każde zakłócenie będzie odebrane jako sygnał przerwania. Na wejście przerwania powinien iść sygnał ukształtowany przez jakiś przerzutnik albo układ RC. Polling w pętli głównej albo odpytywanie co jakiś...
Co ja widzę? Ty Cały kod programu z dziesiątkami pętli nieskończonych i delay'i wrzuciłeś w kod obsługi przerwania?? Gratuluję pomysłowości... :) Po co stosując przerwanie od zakończenia transmisji używasz jeszcze jakiegoś USART_vReceiveByte(void) które miałoby sens gdybyś stosował polling. Nie prościej w [syntax=C] ISR(USART_RXC_vect) { data=UDR; //dalszy...
Bo nie ma tak, że komunikacja z JTAG jest niezależna zupełnie od działania procesora. Jeżeli idzie ci program gdzieś w krzaki, to i komunikacja z OCD może szwankować. Dlatego też pytałem o te tryby stand-by. Piszesz, że dopóki nie podłączysz USB, to wszystko działa ok i możesz krokować kod. Czyli może jednak coś z programem lub konfiguracją kompilatora,...
czesc, mam czysto teoretyczne pytanie dot. wymiany danych miedzy 2mikrokontrolerami. Mam to wytlumaczyc podczas prezentacji,ale troche mi sie juz pomieszalo. Z tego co zrozumialam to:SPE=1,MSTR=zalezy,SPIE=1,SPIF=1, Master ustawia SS=0 i pisze w Data Register co wlacza Clock Generator(czy to znaczy SCK=1???) i bajt zostaje przeslany do Slavea. Wtedy...
Transakcja przerwaniowa ( którą jest np hid- moje przyp. )jest elementem transferu przerwaniowego.Nazwa może być myląca, ponieważ przerwanie kojarzy się na ogół z natychmiastową obsługą zdarzenia, podczas gdy w systemie USB transfer przerwaniowy polega na odpytywaniu urządzenia(polling) w regularnych odstępach czasowych -tak małych jak 1ms lub wielokrotność...
Przepraszam za literówkę, polling. https://pl.wikipedia.org/wiki/Odpytywani... Za zwyczaj jak odpalisz coś sprzętowego w AVR, to potem nie ruszasz tych pinów. Musisz wybrać które chcesz używać. Możesz wstępnie coś ustawić na tych portach przed przejściem na sprzętowe, ale zwróć uwagę na polaryzacje i fazę (2 bity, dokumentacja) bo przy odpaleniu sprzętowego,...
Sprzętowo tak, jak zrobi programowy I2C to 1,1Mb/s da sie uzyskać przy Fosc16MHz, więc przy 20MHz (np Mega324) jakieś 1,3Mb/s. Inna sprawa to na ile slave pozwala. Programowe I2C o prędkości 1.3Mb/s. Nie ma jak 100% czasu procesora przeznaczać na komunikację przez polling. To brzmi jak rozsądny pomysł. Na slave to będzie już trzeba AVRa z zegarem 100MHz....
Z tego co wyczytałem to, to przerwanie jest wywoływane przy każdym naciśnięciu klawisza. Jest ono zwiążane z przerwanie sprzętowym klawiatury. Domyślna procedura odbiera znaki i przekazuje je dalej. Wydaje mi się że procedura ta odbiera dane z portu klawiatury 0x60h. Klawiatura przekazuje bajt po naciśnięciu/puszczeniu klawisza. Po naciśnięciu przychodzi...
Ja też chętnie poczytam o eventach :-) Ostatnio tak kombinuję, że może dobrze byłoby zastąpić dynamiczny polling (czekanie na spełnienie jakiegoś warunku w danym stanie) po prostu wywołaniem danego stanu (z "niebytu") w momencie wystąpienia warunku (czyli eventu). Niestety, ale "coś" co zarządza eventami i potem przekazuje sterowanie do odp. fragmentu...
Sprawdzanie to raczej nie, ale znalazłem tam cos takiego If both interrupts are of the same priority the interrupt which is serviced first by polling sequence will be executed first. To by odpowiadało mojemu przypadkowi- wszystkie przerwania mają ten sam priorytet. Tu od razu sie zapytam, jak w 51ce robi się aby przerwania miały te same priorytety??....
Napisano mi wcześniej, że nie mogę bezpośrednio użyć UDR w switch czy w if, żeby wrzucić z UDR do zmiennej tymczasowej i tą zmienną sprawdzać. Tak więc zrobiłem. Niestety zrobiłeś to źle. Napisano Ci również, że po odebraniu każdego bajtu rejestr UDR można odczytać tylko raz, a Ty wywołujesz funkcję odbierz() , która odczytuje i zwraca wartość rejestru...
Program w tej wersji działa dla ośmiu kanałów. No pewnie że dla innej ilości kanałów będzie źle. Albo dla portu dać maskę i wystawiać dla mniejszej ilości kanałów. Albo zmieniać zależności czasowe. A spróbuję połączyć te dwie funkcje. Ale z wylączeniem przerwania od ADC- to nie wiem. Żądanie pomiaru jest ustawione sprzętowo w rejestrze SFIOR- od przepełnienia...
Witam! Z pewnością chcesz wykorzystać mechanizm "polling" :) jak to się ładnie nazywa w dokumentacjach. Po pierwsze w ATmega8 nie ma flagi Tirf.0, jest natomiast flaga Tifr.0 o którą zapewne Ci chodzi, dlatego pewnie nie do końca che działać. ;) Pozatym aby używać przerwań w ATmega8 musisz też odblokować globalny system przerwań, ponieważ po starcie...
Rdzeń to ARM7, w dokumentacji pisze, że ma VIC: Standard interrupt, IRQ, and non-maskable fast interrupt, FIQ, inputs are provided together with a VIC interrupt controller vector port. The GIC interrupt controller can also be used if more complex priority-based interrupt handling is required. The processor includes low-latency interrupt technology which...
Bez przerwań nie da się zrobić absolutnie niczego, co jest bardziej skomplikowane. Dzięki zastosowaniu przerwań mikrokontroler nie musi stale sprawdzać, czy zaszło jakieś zdarzenie. Ciągłe sprawdzanie czegoś takiego (ang. polling) spowolniłoby program. Ponadto kolejny kłopot to odczytanie danej flagi z układu zewnętrznego (np. przez SPI/I2C) to dodatkowe...
Jak w temacie. Nie mogę wgrać programu do procesora. Tak wiem, to nie jest pełna komenda, ale już na niej się wysypuje. Programowanie STM32F103 działa świetnie. JTag od Freddiego. openocd -f interface/jtagkey.cfg -f target/stm32f1x.cfg -c init -c "reset halt" Open On-Chip Debugger 0.6.1 (2012-10-12-19:56) Licensed under GNU GPL v2 For bug reports, read...
(at)excray No nie za bardzo robi się to tak jak pokazałeś. Przeanalizuj dokładniej pokazany kod a zauważysz, że nie działa prawidłowo. Np. TCNT1 ma 0xFFFF, ina ma więc 0xFFFF. Odmierzasz np. 10 taktów. 0xffff-0x0009 i warunek zakończenia pętli nie jest spełniony... Dodano po 1 No i co się wtedy stanie? Problem byłby, gdyby tam było ==, a jest <....
Witam, Od jakiegoś czasu zmagam się z komunikacją SPI pomiędzy dwoma procesorami stm32l452re. Transmisją i odbiorem danych zajmują się oba procesory. Wysyłam 6 bajtów po 16 bitów, co daje nam sumarycznie 3 przerwania. W taskach od FreeRtosa transmisja danych i sprawdzanie otrzymanych bajtów odbywa się w nieskończonej pętli while. Problem dotyczy tego,...
Z tego co czytalem w datasheecie to przy ustawieniu bitow preskalera CS.. na 0 licznik sie wylacza. Da sie to robic inaczej? Jest to dobry sposób. Zerowanie wartosci licznika 2 zrobilem na wszelki wypadek, bo nie bylem pewny czy czegos nie wpisuje jeszcze przy ostatnim takcie zanim sie wylaczy w przerwaniu, uwazasz ze to zbedne? Nie oto chodzi. Pętla...
>>> DrDead, w szczególności chodzi tu o to że jeżeli bezkrytycznie posłuchamy rady, jak to robi Kol. asembler: 'ja stosuje taką zasada: zawsze w obsłudze przerwania na początku odblokowywuje przerwania globalne' to: 1) ryzykujemy że nastąpi blokada wykonywania przerwań o wyższym priorytecie gdyż zakłócamy naturalną kolejkę wykonywania przerwań opartą...
Może zamiast tak kombinować, to spróbujesz tego co jest opisane na stronie 69 w sekcji Unlimited Length Packet Format i dalej do strony 71? Jeżeli wysyłany pakiet ma długość 107 bajtów, albo jest ładowany na raz do bufora nadajnika z odpowiednio niską prędkością po SPI, albo musi być ładowany po kawałku, z odpytywaniem flagi FIFO, albo zachowaniem zależności...
Faktycznie, teraz dopiero zauważyłem, że dodałeś (a u mnie zabrakło zapamiętywanie poprzednich wartości). Dodatkowo skopałem inicjalizację zmiennych A0 i B0. Pierwsze uruchomienie (z pomocą zmiennej "init") pozwoli na poprawną inicjalizację zmiennych przechowujących "poprzednie" wartości. Dzięki temu przy starcie programu nie wygeneruje się impuls zmieniający...
Cześć wszystkim, Zwracam się do Was z prośbą o pomoc w rozwiązaniu problemu z poprawnym wysyłaniem stringa po UART za pomocą przerwania nadawczego. Męczę, się z tym już któryś dzień, czytam reference manuala, i cały czas nie udało mi się tego problemu rozwiązać. Ogólnie rzecz biorąc funkcje do buforowania zdarzeń odbiorczych/nadawczych są sprawdzone...
Następna sprawa, tak szumnie nazywanie normalnych flag synchronizacyjnych muteksami i semaforami. No przecież to się w "tradycyjnych" systemach rozwiązuje zwyczajną flagą (tudzież kilkoma flagami) synchronizacyjną. Jest to kompletna bzdura, ponieważ obiekty synchronizacyjne blokują wątek, a odczytywanie w kółko zmiennej "volatile bool" raczej niezbyt....
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...
No są takie wyjątki dostępne w rejestrze FPSCR Floating-point exceptions The FP extension records the following floating-point exceptions in the FPSCR cumulative bits, see Floating-point Status and Control Register, FPSCR on page A2-56: IOC Invalid Operation. The bit is set to 1 if the result of an operation has no mathematical value or cannot be represented....
Co to są za bzdury, gdzie ty widziałeś 16bitową atmege?! ------------- Rodzina propellerów nie zadziwia niestety niczym - scalaki są drogie, ciężko dostępne, i wolne . Naczytałem się kiedyś materiałów na ich temat. 1. Spin to badziewie. Sami się przyznali do tego, że soft w spinie marnuje sporo mocy obliczeniowej rdzeni. Siłę procka widać dopiero wtedy,...
Nie wiem czy ktoś uczy wróżenia z kodu. Niestety nie wiem co to polling. Zamieszczam jednak kod uproszczony z obszerniejszymi komentarzami i z jednym (głupim) błędem mniej [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/iom8.h> // definicje zmiennych do sterowania 3 kanałami programowego...
Włączyłeś przerwanie od UARTA a nie masz nigdzie obsługi. W internecie setki przykładów jak to zrobic. BTW: Nawet jeżeli chcesz tego UARTA zrobic na pollingu (bez przerwań) to przy odbiorze musisz testować flagę RXC
przerwania polling stm32 polling stm32 przerwać przerwać
volvo silnika instrukcja serwisowa magnetowid philips kwasu szczawiowego
firmware vestel 17mb170 pralka gorenje ktora dobra
Objętość rdzenia ferrytowego 1kW/10kHz – U100/57/30, ETD64, E80/38/20, dobór Przewody elektryczne pod magnetem Stihl 028: funkcje i diagnostyka