Post musi chyba powędrowac do działu DSP - tam chłopaki doradzą dokałdnie jaki filtr do czego wykorzystać. Generalnie takie filtry polegaja na sumowaniu aktualnej wartości z poprzednia w odpowiedniej wadze (mnożniku) i ewentualnie jeszcze poprzednich an tej samej zasadzie. Dlatego tam definijuje sie ile ma być komórek X(n-1..y). O ile dobrze pamietam...
[syntax=c]RCC_APB2PeriphClockCmd(RCC_AHB... ENABLE);[/syntax] Zdecyduj się, czy konfigurujesz szynę APB2, czy AHB?
Przerwanie nie powinno byc zgubione, procesor przerwania odbiera tylko nie wywoluje procedur obslugi a stan przerwan zapamietuje w wewnetrznych przerzutnikach i jak tylko przerwania sa odmaskowane to wykonuje ich procedury obslugi. Oczywiscie stan ten nie moze byc dlugi dlatego trzeba to robic na czas najkrotszy jak sie da, nie ma innej mozliwosci synchronizacji...
to co kolega zrobił, to jest bufor kołowy. Takie algorytmy średniej kroczącej robi się właśnie w ten sposób, więc pomysł kolega miał dobry. W buforach kołowych operuje się na wskaźnikach, tworząc tak na prawdę listę kierunkowa. Niech sobie kolega poczyta jak to się dokładnie koduje.
[syntax=c]if (poz_odczyt > ROZMIAR) { poz_odczyt = 0; }[/syntax] tablice w C są indeksowane od zera. Jak masz rozmiar = 3 to ostatnim indeksem tablicy jest 2. Powyższy kod powinień więc wyglądać tak: [syntax=c]if (poz_odczyt > ROZMIAR - 1) { poz_odczyt = 0; }[/syntax]
(...)Mam nadzieję, że teraz jest dobrze(...) Wygląda dobrze. Tylko wyjścia 8 i 11 układu 7400 są niepotrzebnie dołączone do masy. A pin 20 układu 74573 musi być dołączony do VCC. Ponadto w C sposób komunikacji będzie chyba wyglądał następująco (o ile się nie mylę) #define ADC_Output *((volatile u08*)0x8001) #define DAC_Input *((volatile...
Ten sposób to tryb LinkedList w DMA. Opisujesz listę buforów, które DMA ma wysłać do wybranego interfejsu. Element listy pokazuje na następny bufor, który mechanizm DMA sam sobie wczyta i przygotuje do następnego transferu. Ostatni element listy niech pokazuje pierwszy i masz bufor kołowy... U mnie na SAM3U4(at)96MHz (CM3) transfer 4MBit/s po SSC działa...
Jak już ćwiczysz to zrób sobie bufor kołowy. Wtedy w przerwaniu tylko odebrną daną dodajesz do bufora, a w pętli wysyłasz. Aby zrobić to bardziej interesującym zrób sobie też taki bufor na wysyłce i wszystko rób na przerwanach wogóle bez pętli głownej (albo w postaci while(1);). Zrób też w ramach ćwiczeń aby korzystać tylko z jednego bufora do echa,...
A jakby taki pomysł wypalił: Ustawić Timer jako Input Capture reagującego na obydwa zbocza sygnału. DMA skonfigurować na żądania od Timer i jako Circular buffer, Periph -> Memory. Analizować w wątku bufor kołowy z DMA, ślędząc licznik transferu i ładować do innego bufora wykryte stany 1 i 0 na podstawie róźnicy czasu obydwu zbocz. Z innego wątku ściągać...
Czy takie rozwiązanie będzie działać? czy można to zrealizować w lepszy sposób?? Będzie dobre, wiele rzeczy się tak robi, żeby uniknąć działania na float'ach. [syntax=c] while ( !(UCSRA & (1<<RXC)) ); [/syntax] Co to robi w przerwaniu? Przecież jak Ci się już wywołało przerwanie to nic nie trzeba sprawdzać. Co robi ta linijka? [syntax=c]...
Witam. Moja propozycja jest następująca: 1. Bufor kołowy jak już wcześniej koledzy zaznaczyli 2. Format ramki telekomunikacyjnej <STX> <Byte1> <Byte2> <CRC> <ETX> I w tym momencie niczego nie pogubisz nie pozamienia Ci się baj pierwszy z drugim itd. Nie wiem czy tym jesteś to w stanie w labview tak zmodyfikować aby sobie...
Nie pokazałeś całego kodu. W obsłudze przerwania nie stosuje się numerów z LCD i czymkolwiek czasochłonnym. Co do realizacji odczytu USART w przerwaniu to podpowiedź brzmi " bufor kołowy". Dodam też że po około 30min wysypują też się atmego8A, No ja się wcale temu nie dziwię, w ogóle nie dbasz o zapisanie SREG ani używanych rejestrów w obsłudze przerwania.
wiem, że mój program do odbioru nie ma zabezpieczenia przed nadpisaniem bufora, ponieważ akurat w tym własnie przypadku zależało mi bardziej na tym aby bufor był kołowy. gdybym zabezpieczał przed taka możliwością kod wyglądałby inaczej: if overflow_485=1 then goto exit_485 if Rx_count>33 then set overflow_485 . . . a procedurkę napisałem, ponieważ...
Witam Mam prośbę czy mógłby mi ktoś ze znających się opisać lokowanie bufora kołowego najlepiej na podstawie procesora C5402. Potrzebuje go opisać, a nie znam się na DSP. Proszę o pomoc.
Czyli sumować z wartości chwilowej co 1 sekunda i potem ta sumę podzielić przez 3600 ? Jeśli dzielenie zrobisz po tych 3600 sekundach to tak. Możesz też co sekundę sumować wartość chwilową, zwiększać jakiś licznik o 1 i na bieżąco dzielić sumę przez licznik. W VersaMax'ie możesz użyć sporo rejestrów, jeśli nie masz jakiegoś wielkiego programu i dużej...
Tyle że podstawowymi warunkami powodzenia tej metody jest to, by częstotliwość migania LED nie była synchroniczna ze składowymi zakłóceń, oraz by czujnik pracował cały czas w zakresie liniowości (nie nasycał się). Co do pierwszego, to można by zastosować technikę "spread spectrum" (z gwiazdami trudniej ;)); drugie wyklucza TSOP. Sumujesz te wyniki...
chodzi mi o sposób na zatwierdzenie wprowadzonej liczby, coś w stylu przycisku enter, oraz o samo wprowadzanie cyfr jako liczba 2 lub 3 cyfrowa. Do takich celów robię sobie bufor kołowy na kilka znaków, w tym wypadku wystarczy na 4. Każdy znak z klawiatury zapisuję do bufora. Pojawienie się określonego znaku (np #) konwertuje liczbę do zmiennej. [syntax=c]...
Zbieraj pomiary do tabeli (jeśli obliczenia mają być ciągłe, to zrób w formie buforu kołowego), a potem to już zwykłe działania (dobrze sprawdzi się kod SCL, zrobisz pętle i arytmetykę w przejrzystej postaci). Średnia, wariancja i odchylenie standardowe, a potem funkcję gęstości.
String to znaki ASCII, więc ustawiasz sobie 2 znaki (2 wartości bajtu) spoza używanego obszaru ASCII i traktujesz je jako stop i start. Algorytm wygląda tak: 1. Czekam na bajt start (lub wykrywam jego nadejście w odpowiednim przerwaniu) 2. Otrzymałem bajt start - zaczynam odbiór 3. powtarzam w pętli (dopóki nie otrzymam bajta) stop: a) odbierz znak...
Odbiór danych o nieznanym rozmiarze przez DMA jest bardzo problematyczny... Ponieważ włączyłeś tryb "circular", to w zasadzie jedyna opcją jest późniejsze składanie danych w dodatkowym buforze - będziesz musiał skopiować to co jest na końcu bufora DMA i potem to co jest na początku - tak aby dane znów były w poprawnej kolejności. DMA realizuje po prostu...
napisany bez bibliotek, miałby objętość o 80% mniejszą niż z nimi. No i .....? Czy w jakiś sposób był lepszy? Czy mikrokontrolerowi robi różnicę czy FLASH jest w 3 czy 58% pełen? 1. (HAL) Obsługa przerwania i zapisanie danych do bufora kołowego (w przerwaniu?) 2. (AL) Odczytanie danych z bufora kołowego, prezentacja wyników Te problemy rozwiązuje RTOS....
Jeśli możesz użyć biblioteki to polecam http://homepage.hispeed.ch/peterfleury/a... jeśli nie to możesz się na niej wzorować. Ma bufor kołowy, odbiór/nadawanie w przerwaniach, przykład z parsowaniem danych też znajdziesz w google. Wyświetlając komunikat zachęty powinieneś ustalić ściśle akceptowalny format, np. Time:RR-MM-DD-GG-MM-SS,...
brakuje "pół HEXa" I nadal nie daje ci to do myślenia ? Jeżeli korzystasz z arduinowej funkcji Serial.read() do odczytu bajtów z UART, to jak najbardziej może się zdarzyć, że jakiś bajt zostanie zagubiony. Jest to zależne od "tempa" z jakim funkcja Serial.read() opróżnia bufor kołowy dedykowany dla UART. (at)szczukot Pomyśl, co read() zwraca w sytuacjach...
Jeśli Arduino to masz bibliotekę do kart SD, schematy podłączenia znajdziesz w internecie bez problemu, musisz tylko uważać na to, ze karta SD zasilana jest napięciem 3,3V i w takim standardzie przyjmuje też sygnały - czyli bezpośrednie podpięcie jej do Arduino pracującego na 5V uszkodzi ją. Warto też pamiętać, że karta pobiera 100mA lub więcej "w szpilkach"...
A to nie chodzi przypadkiem o to, że część analogowa ma z tych 2mVpp zrobić np 1Vpp, a dopiero cyfrowa ma zrobić MAF? Dodatkowo w części analogowej zrobić filtrowanie zapobiegające aliasingowi... Procesor ma żadne wymagania. - Bufor kołowy długości N, wyzerowany, - pointer wskazujące miejsce zapisu nowej próbki do tego bufora - SUMA = 0 na początek....
Być może rejestr kołowy to to samo co rejestr przesuwny. Tylko że nikt tutaj o takim nie pisał. Pisał za to o buforze kołowym. A to oczywiście jest co innego. Bufor kołowy to bufor w którym przemieszczasz się po bajtach za pomocą wskaźników (bez przesuwania elementów bufora). Z kolei rejestr przesuwny to: Po pierwsze operuje na bitach a nie bajtach....
Akurat do LCD Ale ten bufor kołowy jest używany na początku do UART'a. Plus przy samej konstrukcji bufora, jeśli już piszemy artykuł, trzeba wspomnieć o takim fakcie...
Też tak myślałem tworząc swoje rozwiązanie bufora oparte na tablicy struktur (akurat taka była potrzeba), dlatego też zastanawiało mnie tego typu rozwiązanie, zwłaszcza, że pokazane w książce. W sumie, w przypadku, gdy jest to wykonywane w ISR, to w niczym nie przeszkadza, ale wydaje się dość dziwne. Pozdrawiam... robiw
Mylisz się :-) Obliczasz całą tablicę okresu przebiegu, włączasz CIRC w DMA (bufor kołowy), podajesz adres początku tablicy, ilość elementów i wio.. Każdy trigger, np z timera i próbka z pamięci leci do DAC bez ingerncji CPU. Jak dojdzie do końcowej próbki w tablicy dzięki CIRC zawija się na początek i leci kolejny okres :-)
Bufor kołowy ma mieć ogon i głowę. Każdy zapis do bufora ma zwiększać wartość głowy a każdy odczyt ma zmniejszać. Jak się zrównają- to alarm.
Wszystkim. Podstawą do parsowania AT jest dobry bufor kołowy i detekcja CRLF. Istnieje wiele rozwiązań pozwalających prawidłowo przetwarzać ten bajzel (swoją drogą paskudny do parsowania), między innymi użycie bufora kołowego z "szukaczem" (już gdzieś pisałem o tym posta). Jak można obsługiwać UARTa sposobem "zwykłym"? Da się inaczej niż przerwania...
Bufor kołowy, z tym, że jak danych nie będziesz odpowiednio szybko przetwarzał to tak kiedyś zostaną nadpisane, chyba, że masz pojemność dyskową google'a :D
Całego bajtu- i wtedy odczytujesz go w czasie pojedynczych us. Mało tego- możesz to zapisać w bufor kołowy i odczytywać po kolei.
Witam, można również całą tę pamięć potraktować jak bufor kołowy i zapisywać kolejne komplety danych, każdy z nich opatrując jakimś "time stamp" ewentualnie "count stamp" dla rozpoznania tego, który jest najnowszy. Pozdrawiam
Ja kiedyś na AVRku zrobiłem bufor kołowy zapis do końca bufora a potem od zera. Jeden wskaźnik na zapis do bufora (wyzwalanie pomiaru z timera), jeden wskaźnik na odczyt (w wolnej chwili procesora) zapis inkrementował jedną zmienną a odczyt wysłanie RSem dekrementował (jak zmienna za wysoko urosła to przepełnienie bufora (usart się nie wyrabiał ) Ograniczenie...
Buffor Fifo to oddzielna implentacja (zwykły bufor kołowy). Zmieniłem ustawienia I2S tak żeby częstotliwość była jak najbardziej zbliżona do 44100Hz. Aktualnie mam ustawione 44097Hz (tak pokazuje cubemx) i jest duża poprawa, tylko przy starcie mam ok 2-3 sekundy "ćwierkania" a później już gra normalnie.
Problemem dla mnie w moim projekcie jest to, że ramki które składam i wysyłam mają klika długości (12B, 20B,48B i 248B). W związku z tym może lepszym rozwiązaniem będą osobne bufory statyczne dla każdego typu ramki np. bufor kołowy z tablicami dwuwymiarowymi?
Jeśli chcesz zrobić to tylko na procesorze, to poszukaj informacji na temat buforów kołowych. Zasada działania polega na tym że masz dwa wskażniki jeden określający początek danych drugi określający koniec danych. Jeśli jeden z tych wskażników przekroczy zakres na bufor dane zapisywane są od początku bufora. (stąd nazwa bufor kołowy) Na procke lepszego...
Jeśli zastosujesz próbki WAV zapisane jako ADPCM to długość odtwarzanego utworu w tej samej jednostce pamięci znacznie się powiększy - a jest to dość prosta kompresja. http://pl.wikipedia.org/wiki/ADPCM Co do pamięci to w 8051 jest jej niezmiernie mało. Może podejdź do tego inaczej. Niech PC przez RS232 wysyła plik tak duży jak chce, a 8051 będzie go...
No to czemu uważasz, że korzyści wynikające z użycia semaforów nie przewyższają kosztów ich użycia? (; W życiu, w programowaniu, w elektronice, w inżynierii, ..., wszystko jest kompromisem, wydaje mi się jednak, że potencjalne koszty są mniejsze (znacząco) niż potencjalne korzyści. Jeśli koszty są duże, to pewnie dlatego, że starasz się np. odbierać...
Ok datagramy, 300 us to 0,3 ms. Telegramy są kolejkowane, wprowadziłem już bufor kołowy w obsłudze DMA. Musze tylko to przetestować, mój problem występuje bardzo rzadko, raz na parę godzin, przy wymianie danych co 50 ms.
A czy nie da się tego zrobić prościej? Prościej by było użyć filozofii bufora kołowego. Czyli tablicy elementów (u Ciebie sześciobajtowych) i dwóch wskaźników (nie koniecznie rozumianych jako adres fizyczny, bo może być to indeks w tablicy) "głowy" i "ogona" danych do wysyłki. Wtedy w operacjach zapisu i odczytu z bufora odpowiednio interpretujesz...
Witam. Mam za zadanie zaprojektowanie i oprogramowanie protokołu komunikacyjnego pozwalającego na odczyt/zapis zadanych parametrów. Komunikacja z PC ma się odbywać po USART z użyciem przerwań i bufora kołowego. Jeżeli chodzi o bufor to będę opierał się na tej stronie: http://www.embeddeddev.pl/bufor... wiem od czego mam zacząć....
Bufor kołowy przydaje się gdy jednocześnie wykorzystujesz dane odbierane i odbierasz, dzięki czemu obsługa odebranej danej może trwać dłużej niż czas do odebrania kolejnej. Ty o ile dobrze rozumiem chcesz odebrać całą paczkę danych i wówczas poddać je odróbce wobec czego wystarczy ci klasyczny bufor.
Witam, Zwracam się z prośbą o pomoc przy moim projekcie. Tematem projektu jest obsługa termometru DS18B20 poprzez interfejs USART pracujący w trybie half duplex z przerwaniami i buforem kołowym. Wyszukiwanie urządzeń na magistrali 1-Wire, odczyt co zadany interwał pomiarowy podawany w milisekundach. Wiem mniej więcej, jak obsługiwać ten termometr poprzez...
nie rzutuje nic na floata. Wczytuje od razu z bufora do i2sa w przerwaniu od i2sa. Zaczynam od 45 bajtu. Słychać tylko szum. Może problem jest z czytaniem wartości z karty w przerwaniu? Może czytanie kolejnej wartości z karty trwa za długo? Mam bufor kołowy 512 i gdy dojdę do jego końca to odczytuje kolejne 512 bajtów pliku wave i wysyłam dalej od początku...
.które z kolei są obsługiwane też przez DMA (request RXNE), które chodzi w trybie circular i zapisuje takie paczki po 3 bajty w większy kołowy bufor. Jaka jest wielkość tego większego kołowego bufora i czy jest podzielna przez 3? Co ile sekund bufor się zawija?
Generalnie odbierać dane do bufora kołowego lub prostego i szukać początku ramki. Skoro dwa pierwsze bajty opisują ramkę, odbierasz je i sprawdzasz, czy są prawidłowe. Jeśli nie, odrzucasz bajt i wracasz na początek. W jakiejś zmiennej zapisujesz sobie ile danych trzeba odebrać dla danej ramki i tyle odbierasz. Tu można zrobić jakiś limit czasowy. Po...
marmur99 - nie słyszałem o brzytwie Ockhama. Zgadzam się z Tobą (napisałem to w poście wyżej), że przy megahercowych częstotliwościach to nawet DSP będzie miał problemy, nie mówiąc już o '51. Metoda prostokątów to zwykłe uśrednianie, ale jak to zaimplementować, żeby to chodziło w real-time? Trzeba by zrobić bufor kołowy i uśredniać konkretną liczbę...
Jeżeli programujesz w C to ściągnij wersję demo kompilatora KEIL'a i tam w przykładach jest chyba projekt o nazwie trafic. W nimże wszystko co potrzeba- bufor kołowy, protokół Xon/Xoff i parę innych szczegółów. Było to co prawda pod mini system czasu rzeczywistego ale wiele z tego da sie wykorzystać. Powodzenia.
Teraz dopiero mam nad czym się zastanawiać. :cry: Zaczynam sobie tłumaczyć- FSM- automat skończony. Zamiast FIFO- może bufor kołowy? Wszystko sprowadzić do sprawdzania w main()? [syntax=c] while(1) { Event_I2C(); Event_something(); Event_something_else_1(); ... } [/syntax] Wprowadzasz mnie na wysoki poziom abstrakcji. Nie potrafię tego sprowadzić do...
No fakt, to jest BASCOM 8051 a nie AVR. :oops: Ale idea jest taka sama. Trzeba zrobić sobie bufor w pamięci (np. tablica bajtów - Array) i dwa wskażniczki: Zapis, Odczyt; które będa sobie biegać w kółko po tablicy - tworząc tym samym bufor kołowy (http://en.wikipedia.org/wiki/Circular_b... Zapis będzie wskazywał element, który aktualnie można zapisać....
Zostaje poruszanie. Trzeba poruszać głowę węża a potem przesuwać kolejne punkty o krok dalej. Myślałem tu, by użyć bufora kołowego, ale uznałem, że łatwiej będzie tak: Niepotrzebna komplikacja. Wystarczy zaświecić jedną diodę reprezentującą głowę i jedną zgasić.
Witam. Mam tablice zadeklarowaną, np array<int,2>^ tab =gcnew array<int,2>(4,5); (kod C++/CLI ale tak czy siak to sie tyczy wszystkich jezyków i roznych tablic) W jaki sposób mozna przesunąć wartosci tablicy w prawo (nie w lewo!) o jeden. Oczywiście to ma byc taki bufor kołowy, czyli wartość o najwyzszym indeksie przesuwa sie na poczatek...
a czym sie rózni tablica volatile uint8_t od char[] wg Ciebie.? Czy komórka pamieci , w której uint8_t jest inna niz komórka w której jest char? Oczywiście używajac sscanf musisz mieć pewnosć!! ze masz w tym buforze cały komunikat a nie np połowe, a następna połowe bedziesz skanowac w drugim rzucie - tak sie nie da.. Osobiście sscanf bym nie użył do...
A może jednak lepiej pamięć Flash NAND? Np. taka: EN27LN4G08 Jest to pamięć w obudowie TSOP48. Zasilana 3,3V. O pojemności bagatela 4Gbit ~ 512MB. Podzielona na strony po 2048 bajtów. I jest tania. Minusem jest to, że trzeba odrazu 2048 bajtów zapisać, ale w XMEGA mamy nieco RAMu, więc można zrobić bufor. Ostatecznie można użyć hybrydy: NAND Flash +...
szymon122 napisał: Jaka prędkość maksymalna jest dla 1, 2 i 4 kanałów? 2M, z tym że, ponieważ atmega ma już mało mocy na przerabianie danych z portów, od 20ksps są zawsze 4. Coś tam jeszcze może pomyśle. No i pomyślałem. Napisałem obsługe dla analizatora szybszych wartości (7 opcji synchronizacji), oraz dodałem 4M: - 1,2,4 kanały 100-500khz bufor kołowy...
Nie rozumiem? W statusie transmisji nie masz żadnego ID, który mówiłby o tym do której transmisji jest ten status. Jak chcesz rozróżniać ID statusu? Zresztą funkcja wysyłająca będzie miała dostęp do indeksu aktualnie wysyłanej wiadomości i będzie ją ponawiała, aż wyczerpie liczbę prób po czym ustawi odpowiednie flagi dla main, usunie bieżącą wiadomość...
Procek ustawicznie się resetuje. Wyrzuć funkcje PWM_init i Timer1_init Attiny4313 ma tylko 256B RAM, wiec na pewno trzeba zmniejszyć wielkość buforów kołowych, a może nawet w ogóle zrezygnować z buforowanego UART. Pytanie czy w pozostałym kodzie nie ma czegoś pamięciożernego i nie następuje przepełnienie stosu.
Dzięki. Nie wziąłem pod uwagę, że oś y nie jest typu "czas", a jedynie "etykiety", więc nawet jeśli później dodasz coś dla tego samego znacznika czasu, to po prostu "cofnie się w czasie", ale dodając go po prawej stronie wykresu. Więc moje obliczenia "działającego zegara" były po prostu przesadzone... Ponieważ alokacja pamięci dla bufora pierścieniowego...
Płytka ta zawiera układ STM32F401. Schemat jest: https://obrazki.elektroda.pl/4276299300_... Czujnik ten jest połączony z ADC. Jest to jednak, jak wynika z dokumentacji kiepski czujnik, bez jego zestrojenia będzie się nadawał bardziej do określania zmian temperatury. Ponadto nie przetwarza on przecież temperatury otoczenia. Można zastosować...
Czy masz jakąś notę katalogową - dawne czasy, pewnie nie? A może dane przetworników nadawczego i odbiorczego? Albo aplikacja? Danych brak, przetworniki magnetoelektryczne. Jutro pomierzę, i ewentualnie zdjęcia wrzucę. No jeśli chodzi o efekty typu reverb (pogłos), to nie mam ultrafioletowego pojęcia, jak to jest zrobione cyfrowo (czas opóźnienia chyba...
I już po problemie:D nie potrzebnie pisałem.. Obyło się bez buforów kołowych, po prostu dałem w przerwaniu po zapełnieniu bufora wyłączanie przetwornika a włączanie dopiero po przepisaniu tablicy do drugiego bufora.
A nie prościej sprawdzić zmienne bufora kołowego ? Jeśli są równe to bufor pusty.
Mnie się wydaje, że być może UART_TRansmit nie sprawdza czy nie nadpisuje bufora kołowego...
Rozumiem. Mój błąd i niedoczytanie datasheeta. W programie mam 9 bitową rozdzielczość a czekałem 750ms. Ten problem juz z głowy. Dostaję odpowiedź maksymalnie w przeciągu 200ms. Powiedz mi proszę w takim razie jak np. rozwiązać sprawę SHT11? Tutaj przy szybkich odczytach potrzebna jest tablica. Chodzi mi po prostu o to, żebym mógł ustawić odpytywanie...
Nie rozumiem również linijki w usart_getc: UART0_RxTail = (UART0_RxTail + 1) & UART0_RX_BUF_MASK; Po co ta maska? Zajrzyj do przykładów z dokumentu o którym wspomniałem, tam jest opisany przyklad takiej funkcji getc z prawidłowo użytymi indeksami. Wyjaśnię za autora. Masz tablicę 2*N elementową, maska (N jedynek) w tym przypadku ogranicza zasięg i...
W jakim celu robisz takie wielkie odstępy między linijkami? Strasznie się to analizuje. Tab1 wygląda na nieużywane. W jakim celu odejmujesz 101.45? Jeśli dobrze rozumiem to wrzucasz nowy element do tablicy z indeksem _device.cv_rotation3 i jest to od razu aktualna ilość pomiarów, więc pętle powinny też być do tej, aktualnej ilości pomiarów. W przeciwnym...
Kolega zrobi tak: Nadawanie: Organizujemy bufor kołowy (tablica w RAM np. 1KB i dwa indeksy - zapisu i odczytu). Procedura UartSend(unsigned char* txt, int size) kopiuje dane z txt do bufora zapisu. Po każdym bajcie podbija się indeks zapisu (i zawraca na początek bufora gdy dojdzie do końca). Po przepisaniu danych zabiera się bajt z pozycji indeksu...
..... ładująca dane do bufora kołowego .... Za wiele oczekujesz....
Czemu chcesz to pisać w asemblerze? Zrealizuj sobie odbiór na bazie bufora kołowego. Znajdziesz sporo gotowych przykładów w C.
...tak więc nie wiem jak to odebrać bo nie dość, że z powrotem dostaje to co wysłałem to jeszcze dostaje pare znaczników dodatkowych jak CR i LF... By wyłączyć echo w telefonie , wyślij komendę ATE0. ...więc gotowa funkcja "void UART_getstr (char *s);" odpada z tego powodu, że odbiera do momentu gdy nie pojawi się znacznik końca więc praktycznie w...
Myślałem właśnie o buforze kołowym dla wiadomości nadchodzących bo dla wychodzących raczej nie trzeba - host odpowiada tylko wtedy, gdy użytkownik podejmie jakąś akcję korzystając z GUI. Problem tylko w tym, że jak moduł ZigBee sygnalizuje nadejście nowej wiadomości (zdarzenia) to jego charakter (tegoż zdarzenia) zawarty jest w kilku rejestrach modułu...
Koncepcja jest nie najgorsza pod warunkiem, że w ciągu danych nie występuje 0xA3. Owszem, masz rację. W ramce A3 może się powtórzyć (np. kiedy się jedzie z prędkością 16,3km/h ). Dlatego proponowałem po wykryciu A3 zbierać następne bajty do bufora już bez ich oglądania (czy to A3 czy nie), tylko na ilość (konkretnie jeszcze trzy bajty po A3). Zakładając...
Moze problem jest z programem odbiornika albo zacznij korzystac z przerwan i bufora kołowego, koledzy juz proponowali nawet gotowe biblioteki.
(at)arkady25 Cóż, najlepiej było szukać hazardów oraz zwalić winę na błędną gospodarkę buforem kołowym w programie, który ma w sumie ze 40 linii oraz wysyła jeden znak na sekundę. Dobrze, że nie doszliśmy do barier i inwalidacji cache.
Witam. 230 na kanal przy pomiarze sinusa ? Moze kolega wyjasnic dokladniej ? Jesli kolega chce zatrzymac 230 x 3 (3 fazy) x 16 bit danych to nie wystarczy pamieci w samym AVR.Jesli to tylko 1 faza to zostanie jeszcze polowa pamieci na pozostale operacje .Mysle ze w tym 1 przypadku należałoby podzielic obliczenia na etapy , po wczytaniu np 115 pomiarow...
Może zrób tablicę na 120 wartości (pomiary co 5s przez 10 minut) i wrzucaj tam stany licznika na zasadzie bufora kołowego, np. z indeksem n. Jedną pętlą obliczysz średnią ze zmian licznika, biorąc dla każdego elementu, jako początkową, "starą" wartość z indeksu n+1. Zamiast bufora kołowego możesz wykorzystać kolejkę FIFO. Element, który będzie "wypadał"...
OK, dzięki. Ale chodziło mi o coś porządnego. Np. dla usart: aby było na przerwaniach, oparte na buforze kołowym, z pełną sygnalizacją stanu transferu w przerwaniach. To co jest na stronach Atmela to jakieś przedszkole.... To tylko przykład podany przeze mnie dla usart. Z innymi peryferiami jest podobnie... Pozdrawiam.
Weź sobie przypadek bufora kołowego do którego dane są pchane np z UARTa lub innego szybkiego peryferiala i do tego jakiś protokół co ma ramki po !%4.
No i kolejny update, znalazłem kilka opinii, że przerwania w bootloaderze to nic dobrego (bez większego wyjaśniania dlaczego? ale od osób na avrfreaks raczej ze sporym zasobem wiedzy) a jednak w książce (at)tmf jest wręcz opisane jak to zrobić by przywrócić wybrane przerwania (intvectortable_case1.c) A cóż takiego strasznego się wydarzy jeśli włączysz...
(at)nowyARM Nie cytuj mnie wyrywając poszczególne słowa z kontekstu, zmieniając mój (raczej chyba to oczywiste) żartobliwy post w cos zupełnie innego. Przy okazji jak piszesz programy? Wszystko prawie tam jest zerżnięte od innych. Taki np bufor kołowy czy inne rozwiązania. Powinieneś na wszystko mieć swoje oryginalne autorskie rozwiązania (moze bufor...
(at)Piotrus_999 Przceież to czym piszesz to jest właśnie ring/double/ping-pong/bounce buffer. Uogólniając tak mocno to tak. Jezeli cały bufor uznamy za jeden element bufora kołowego.
To można rozwiązać na wiele sposobów. Jeśli tylko cześć ramki jest stała a zależy Ci na wartościach odebranych to można użyć bufora kołowego i kiedy wykryjesz koniec ramki to wciągasz z bufora poprzednie siedem bajtów. Tutaj jednak sprawa jest prostsza. Poniższy mikroprogram powinien sprawdzać po kolei nadchodzące bajty. Jeśli się zgadzają to wskaźnik...
Kazałeś odebrać 5 bajtów to woła callbacka jak tyle odbierze. Jezeli nie wiesz ile to możesz odbierać po znaku i sobie interpretować albo wkładać do bufora kołowego, odbierać i czekać na przerwę w transmisji (co może świadczyć o zakończeniu). Masz wiele opcji.
https://obrazki.elektroda.pl/8545401100_... Mój poprzedni temat o Pierwsze kroki Jakiś czas temu publikowałem temat o https://obrazki.elektroda.pl/4535548900_... Wyszukujemy DHT. Biblioteka DHT wymaga też dodania Adafruit Unified Sensor Library, więc dodajemy obie biblioteki. Najpierw Unified Sensor: https://obrazki.elektroda.pl/1839946000_...
Teoretycznie wiem chyba jak to zrobić, ale nie potrafię tego praktycznie wykorzystać Przedewszystkim odbieraj dane w przerwaniu ISR(USART1_RX_vect) // przerwanie do odbioru znaku i zapisu do bufora { bufor[ilosc_znakow]=UDR1; ++ilosc_znakow; } GPS bezprzerwy sra danymi, praktycznie tylko dobierasz od niego dane. Najprosciej...
AD 1. Jak dla mnie zrobiłeś bufor kołowy. nie prościej zrobić to samo programowo. deklarujesz dwa wskaźniki ptr start i ptr koniec piszesz pod adres startu a odczytujesz spod adresu konca. Za każdym razem większając adres startu przy zapisie i adres końca przy odczycie efekt będzie taki sam. ( przy załoźeniu ze z tej pamięci korzysta tylko procek)....
Brawo, punkt za bycie wróżką. Nie wiemy jak Autor ma zrealizowany program, w pewnych sytuacjach takie podejście uniemożliwi wysłanie czegokolwiek (jeśli np. Autor ma zrobione wysyłanie porządnie na buforze kołowym i przerwaniach od modułu UART). Poczekajmy może (i tu prośba do Autora) na udostępnienie jakiegoś kodu i podanie szczegółów.
A po co w ogóle chcesz ręcznie wywoływać przerwanie od nadania? Wrzuć po prostu dane do TDR to się samo wywoła w odpowiednim momencie. [syntax=c]volatile unsigned charut0_mst=0, ut0_sta=0, ut0_end=0, ut0_buff[32]; //pomocnicze dla nadajnika/odbiornika rs //bufor kołowy nadajnika void rs_tx(uint8_t data) { TX_1;//led tx //ltx0=2; EnterCritical(); if(!ut0_mst)...
W moim przykładzie realizowałem fft (za pomocą cmsis'a, 64 próbki), atan2 (na fix pointach), filtr fir w przerwaniu co 2.5us na 22 tapsy, obliczanie nowych nastaw i rekonfiguracja hrtim... HAL nie był tutaj, żadnym problemem, ale realizowanie filtra w przerwaniu z flash'a już tak. Formą optymalizacji prędkości wykonywania kodu nie było użycie innej...
Ale pojedynczy zapis czego na kartę SD trwa te 40ms? Jednej paczki danych z pomiarów? Jaki jest całkowity czas, w którym próbkowanie ma być wykonywane bez przerwy co te 2ms? Moim zdaniem trzeba realnie określić czas pomiaru, dane zrzucać do dodatkowej (odpowiednio dużej) pamięci RAM, i potem po serii pomiarów zatrzymywać dalsze i dane z RAM przepisywać...
Warto tylko dodać, że jeśli przełączamy kanały (czyli mamy np. multipleksowany SAR) to stosując Oversampling mamy 2 opcje: - zbieramy OSR próbek z kanału 1, potem OSR z kanału 2 itd. - zbieramy 1 próbkę z kanału 1, 1 z kanału 2, itd. aż będziemy mieć OSR z każdego Wyborem projektanta/programisty jest czy będzie stosował długi bufor (czyli mamy próbkę...
Hm, rzeczywiście obsługę "dekodowania" zawartości odebranego stringu można przenieść poza przerwanie. Choć - to akurat rzeczywiście działa :) Ale - to raczej nie zmieni problemu z "ginącą" częścią odebranego stringu, bo przecież zawartość bufora się nie zmienia od momentu "poskładania" go w serial1charmatch. Kiedy następuje wywołanie serialcharmatch...
Rozwiązanie polega na utworzeniu bufora kołowego z messagebox-ów i nastepnie w przerwaniu sprawdzaniu które messagebox-y odebrały dane z magistrali CAN- ze względu na prawdopodobną mozliwość "zgubienia" przerwania od odbioru z magistrali CAN. Dla zainteresowanych służe kodem.
Gryzłem się z podobnym problemem. Znalazlem rozwiazanie w postaci przetwornika taktowanego otrzymywanym zegarem SPI (np. AD7683), a do machania CSem trigger DMA wykorzystałem timer w trybie PWM... PWM generowany przez timer to machanie CSa. Wypełnienie (stan wysoki) ustawilem na minimalny czas między konwersjami. Pelny cykl timera wyliczylem na mniej...
na dzień na każdą zmiane jest 1536 bajtów. Zapisuje tam czasy stanięć i ruszeń maszyny czyli zapisuje jednorazowo 3 bajty. Tak pierwszy bank jest do celów specyjalnych i mam tam wolne komórki To może coś a'la rejestr(bufor) kołowy i odpada kasowanie komórek. Komplikuje się troszkę obliczanie adresów i banków ,bo musimy sprawdzać czy nam się pamięć...
4. Ja bym taki odtwarzacz zrealizował jako kilka równoległych procesów: Proces 0: Wstępne załadowanie buforów danych (np. 8), które powinny stanowić ciągły obszar w pamięci, ustawienia i tym podobne; Proces 1: Przesyłanie danych z bufora do DAC przez DMA taktowane z timera. Wielkość pojedynczego transferu to 1 kwant czasowy, np. dla 2kanały x 16 bit,...
Na chwilę obecną masz program tak skonstruowany że odbierasz dane pomiędzy linijkami programu. Jeśli program nie wykonuje się wystarczająco szybko albo wystąpi jakieś dłuższe przerwanie które go przyblokuje to zgubisz pakiet danych. Proponowałbym Ci zastosowanie bufora kołowego w przerwaniu od odbioru i w wątku głównym czytanie danych z tego bufora....
LChucki napisał: I najważniejsza porada, zmień takie kwiatki jak Kod: c Rozwiń Zaznacz wszystko void Graph(Adafruit_ILI9341 &d, double x, double y, double gx, double gy, double w, double h, double xlo, double xhi, double xinc, double ylo, double yhi, double yinc, String title, String xlabel, String ylabel, unsigned int gcolor, unsigned int acolor,...
bufor kołowy stm32 usart bufor kołowy kołowy wykres
podświetlenie licznik skoda zalany klucz skuter elektryczny instalacja
honda android toshiba 37av501p
Jak obniżyć napięcie stałe z baterii o 1V? Odwrócony obraz kamery cofania w radiu Android - jak naprawić?