1. z tego co piszesz to przerwanie o najwyższym piriorytecie będzie występowało z częstotliwością 4kHz. Zakładając że będziesz miał zegar 8MHz to na obsługe przerwania (zapisanie 8 bajtów) i obsługe innych przerwań będziesz miał: 8MHz/4kHz = 2000 cykli zegarowych co w przypadku procesorów typu RISC daje jakieś 1500 instrukcji. A to jest całkiem sporo....
Witam, jestem poczatkujacy w AVR32 Studio. Czy ktos moze mnie oswiecic w jaki sposob ustawia sie wielkosc stosu ? I w jaki sposob sprawdzic czy nie jest przepelniony podczas pracy programu ? At32UC3A0512 ( lub UC3A3256 ) jest w STK600 + JTAG mk2. Pozdrawiam Proszę poprawić pisownię! Robak
Witam Chodzi o bascoma i atmega16 Mam takie pytanko Czy w takim programie będzie mi się przepełniał stos? do If A = 3 Then A = 0 End If Incr A Select Case A case 1: do ................. ............... loop until sw=0 case 2: do ................. ............... loop until sw=0 loop Naciśniecie sw powoduje wyjście z jednego case i przejście...
Witam mam długi kod i nie mogę go skompilowac Bo ma powyżej 4kb Ktoś skompiluje? 'Piornik06.bas 'Program do wyświetlania ściągi. 'Z pełnym wykorzystaniem Eprom (512 znaków). 'W czasie pisania tekstu pozostaje on cały czas w okienku wyświetlacza. 'Pozwoli zapisać treść w postaci 512 znaków. 'Aby zapisać tekst, należy w Portc.3 ustawić 1 i nacisnąć...
Jestem na O0, breakpointy mam w pierwszych liniach main, program działa tak: Przede wszystkim przejdź do widoku asemblera i tam zobacz jak wygląda wykonywanie programu. Breakpointy też postaw na instrukcjach asemblera, przed main. Czasami informacje o debugowaniu, pomiędzy C a asemblerem się rozjeżdżają, chociaż dla O0 nie powinno mieć to miejsca....
'Rozpoznanie czy są to dane z terminala GSM Pomoc_i(3) = Pomoc_i(2) ' super wydajność , od razu for dla Pomoc_i(3) Goto Abc: ' zobacz komendę 'exit' End If siada ci stos i dlatego procesor idzie w krzaki i zaczyna śmiecić pewnie to podprocedura innej podprocedury wywołanej przez jakieś if i jeszcze dużo danych odkładanych...
Jeżeli w programie występuje nadpisywanie RAMu to można w dowolnym jego miejscu sprawdzać SP? Kiedy SP może się przepełnić, np w czasie przerwań albo wywoływania funkcji zwłaszcza gdy operuje się na większych buforach/ stringach? SP możesz odczytać w dowolnym miejscu, to przecież jeden z dostępnych rejestrów MCU, ale... średnio to pomaga. Owszem, zauważysz,...
tak sie sklada, ze dla 16b PICow stos w domyslnej lokalizacji po przepelnieniu wylozy program (nastapi sprzetowa pulapka od przepelnienia stosu, ktora skonczy sie resetem, chyba ze programista zadecydowal inaczej), natomiast w MSP430 domyslnie umieszczony stos, przed wywaleniem programu zmasakruje jeszcze wszystkie zmienne w ramie Domyśle ustawienia...
W trakcie wykonywania tego podprogramu zostało zgłoszone przerwanie zewnętrzne na nóżce int1 atmega328p. Czy atmega328p przerwie wykonywanie podprogramu nóżki int0 Zależy jak zadeklarujesz przerwanie, czy ISR bez atrybutu lub z atrybutem ISR_BLOCK albo jako SIGNAL czy ISR z atrybutem ISR_NOBLOCK lub jako INTERRUPT. Jeśli przerwanie w przerwaniu jest...
Mój ulubiony "kwiatek" :) Gosub Wybor Wybor: Potem mamy masę gosub'ów bez poprawnego wyjścia. Generalnie program źle napisany. Piszemy programy tak by subrtyny mogły się kończyć i nie zagnieżdżamy nadmiernie podprogramów. To nie watchdog tylko przepełnienie stosu. Chociaż i watchdog może w kilku przypadkach resetować, zwłaszcza tam gdzie jest WAIT...
Pisząc w C tego nie wiesz i wiedzieć nie będziesz (chyba, że zajrzysz w wygenerowany przez kompilator kod assemblera - co swoją drogą jest czasami przydatne). Nie wiem jak daleko działa REGISTER, ale prawdopodobnie kompilator patrzy bardziej na to jak na mocną sugestię niż 100% wymuszenie, bo co by zrobił gdybyś zrobił 20 zmiennych int jako REGISTER?...
Charakterystyczną właściwością bufora cyklicznego (kolejki FIFO) jest to, że wskaźniki początku i końca (odczytu i zapełniania) przemieszczają się niezależnie - każdy w swoim tempie. Stąd w Twoim programie indeksy powinny być niezależnymi zmiennymi globalnymi/statycznymi. Przypisanie liczniku=usartbufferlicznik zakłóciłoby normalny tryb pracy bufora...
W funkcji Convert_Int_To_LCD umieszczasz łańcuch tekstowy po konwersji w temp, któy ma długość tylko 1 bajta - to wystarczy jedynie na NUL, więc na pewno masz przepełnienie bufora i nadpisanie sąsiednich zmiennych/stosu. Sprawdź w innych lokacjach, czy nie masz podobnych problemów. Kolejna sprawa - czy odczyt/zapis EEPROM dokonujesz z funkcji obsługi...
(at)rewolt90 Nie jest dokładnie tak jak piszesz. AVR gcc domyślnie umieszcza literały znakowe ("abcd...") w pamięci RAM. W twoim oryginalnym programie te literały były dodatkowo kopiowane na stos przy wywołaniu funkcji main co powodowało przepełnienie stosu. Dodanie static nie wymusza tego, że te zmienne wylądują w pamięci programu. Uniknąłeś w ten...
Trochę inaczej. Gdy w programie wywołujesz sub to program zanim przejdzie do sub wykonuje kilka-kilkadziesiąt niewidocznych dla Ciebie operacji. Mianowicie zapamiętuje stan potrzebnych rejestrów i zmiennych w komórkach pamięci. W miejscu które nazywa się stos. Gdy z tego sub wywołujesz następny sub to znowu zapamiętuje kilka- kilkadziesiąt danych. A...
Wygląda na przepełnienie stosu. Na początek wywal wszystkie stringi do FLASH, np. [syntax=c]__flash const char text[81]="ABCDEFGHIJKLMNOPRSTW" "NIE TA LINIA :( " " " "Maciek mowi: ";//PRSTUVWXYZabcdefghijklmnoprstuvwxyz1... [];'\\,./!(at)#$%^&*()`";[/syntax] i [syntax=c]snprintf_P(text, 21,PSTR( "%s%04d%02d%02d %02d:%02d:%02d "), dow, (uint16_t)time.year...
Klasa TwoWire (której obiektem jest Wire) też używa przerwań. Po wejściu do ISR przerwania są blokowane. Jeżeli chcesz, aby dane ISR nie blokowało innych przerwań można użyć ISR_NOBLOCK:[syntax=c]ISR(TIMER2_OVF_vec... ISR_NOBLOCK) { ... }[/syntax]Byłbym jednak z tym bardzo ostrożny, ponieważ może przydarzyć się przepełnienie stosu. https://www.nongnu.org/avr-libc/user-man...
Nie tyle musi być zadeklarowana jako reentrant, bo takiej deklaracji nie ma:) co musi być tak napisana, aby była reentrant. Co do zmiennych statycznych to mogą one być wykorzystywane - w końcu taka jest idea zmiennych statycznych, żeby były dzielone przez wszystkie instancje/wywołania funkcji. Co do innych zmiennych to dopóki się używa zmiennych lokalnych...
Całemu zamieszaniu , winna jest instrukcja Goto Poczatek :( Jej użycie , powoduje przepełnienie stosu i w efekcie "wariowanie" procka :D Jeśli chcesz zakończyć działanie podprogramu , to pozwól programowi "dojść" do End Sub , użyj Reurtn , lub warunkowej pętli Do ... Loop Until.Nawiasam mówiąc , taki styl pisania kodu bardzo mi się nie podoba , bo "zaciemnia...
Przypuszczam że przyczyną wieszania programu jest przepełnienie stosu. Chyba za bardzo pogubiłeś się w tych skokach :) Przyglądnij się podprogramowi Menu , który w rzeczywistości nie jest podprogramem, a wywołujesz go przez Gosub Menu w Podprogram_4 . [syntax=basic4gl]'----------------------... Menu:...
Możesz zagłębiać się więcej razy, tylko tak aby poźniej wracać. Gdy masz więcej zagniezdzeń to zwiększasz RAM dla stosu.
Hejka ponownie. Przeanalizowałem trochę ten Twój program w wolnej chwili i faktycznie wychodzi na to, że masz zapętlone wywoływanie instrukcji GOSUB-RETURN Także zwiększanie parametrów stosu nic Ci nie pomoże bo wcześniej czy później i tak nastąpi przepełnienie. Sęk tkwi w podprogramie DODAWANIE. Jest on wywołany na samym początku (przed instrukcją...
Auto napisał: satanistik napisał: Program w przerwaniu od timera mierzy wartość z ADC Rozwiązanie dość kiepskie. Wchodzi w przerwanie, wyzwala pomiar, czeka na wynik W PRZERWANIU!, Nie twierdze że to jest rewelacja, ale samo w sobie nie powinno prowadzić do błędu w stylu "brak kolejnych pomiarów ADC". "Oczywista oczywistość". Tyle, że bez kodów źródłowych...
Program nie tyle idzie w krzaki, ale po prostu warunek nie ma szans się spełnić. Bez całości kodu trudno coś powiedzieć, bo z tych fragmentów wynika, że warunek (ms==1) może być spełniony raz na ok. 4 miliony sekund (zmienna miliSekundy nie jest nigdy zerowana, a tyle czasu zajmie przepełnienie zmiennej typu long int). Ogólnie: Do sterowania aktywnością...
Jednej rzeczy natomiast nie rozumiem. Mam zegarek DCF produkcji Chińskiej, który dostałem w prezencie kilkanaście lat temu. Jego zdolność do odbierania DCF wydaje się być znacznie lepsza. Ma antenkę ferrytową podobnych rozmiarów jak ta w zestawie a działa dużo lepiej. Kiedyś kupiłem odbiornik DCF do ustawiania czasu w komputerze i też odbierał dużo...
Zacznijmy od pytań: 1. Które bity według Ciebie ustawiłeś w TCCR2B : Autor tematu pisał, że stosuje gotową bibliotekę do obsługi jakiegoś panelu dotykowego. Z tego, co zrozumiałem, to przerwanie to znajduje się we "wnętrzu" tej biblioteki. Takie efekty są oczywiście normalne, gdy ktoś mało świadomy tego, co się dzieje w jego programie stosuje gotowe...
Może trzeba było choć nieco wspomnieć o dostępności Arduino Core dla tych MCU? Prawdę mówiąc nawet nie wiedziałem, że już na te MCU są porty. To dobrze. Ciekawi mnie, czy na tym MCU VMT jest we FLASH, czy nadal jest kopiowane do SRAM, co jest zmorą C++ na AVR. Jestem za. Ostatnio w dziale dużo artykułów dla zaawansowanych - jakby zapomniano, że najpierw...
Witam . Napisałem ( prawie) sobie na ww procesor program w asm i bascomie który ma robić za zamek otwierany kartą . W bascomie wszystko działa w 100 % według założenia jednak w asm mam taki problem że układ sam zmienia swoje taktowanie (ponad 2x) przez co wszystkie funkcje czasowe nie pracują jak powinny . Nie było by w tym nic niezwykłego ( ustawiony...
Witam forumowiczów, Sytuacja wygląda tak, że z jednostki nadrzędnej słane są ramki danych, Po każdej ramce jest szczelina czasowa tak aby nasza ATmega zdążyła odpowiedzieć, Mamy Atmega16 kwarc 16MHz i transmisje 57600 (w przybliżeniu), Gadamy przez RS485 tak, że między ramkami jeszcze przełączam linie bufora, Steruje równocześnie buforem wejścia i wyjścia...
http://obrazki.elektroda.net/42_12648689... Na temat projektu avr-cdc z [url=http://www.recursion.jp/avrcdc/]htt... napisano już wiele i jeszcze więcej - nie będę się rozpisywał o samej idei - można zajrzeć chociażby do wątku [url=http://www.elektroda.pl/rtvforum/to... prosta niezawodna przejściówka...
witam. buduje systemy na rs485. niestety zadna z komend bascomowych nie była mi przydatna. używam przerwania do odbioru i sam obsługuje własny bufor z ustawieniem flagi informujacej iz właśnie w buforze jest odebrany "ważny" pakunek danych '------------------------ Rx_serwer: Rxdata = Udr1 Rem zabezpieczenie przed przepełnieniem bufora If Rx_count...
Poza tym odnoszę wrażenie że pogubiłeś RET czyli powrót w swoich podprogramach. Pamiętaj, że wywołanie CALL zazwyczaj kończy się RET w podprogramie. Z kolei w kilku innych miejscach zamiast CALL chyba powinieneś mieć RJMP. U Ciebie w tym programie na 99% następuje przepełnienie stosu.
No więc co w takim razie zrobić aby tak się nie działo? jest jakiś sposób na to? moją główną funkcją nie jest main. Main jest tylko ustawianiem wszystkiego. Główna funkcja to READY. To jak zrobić aby ten stos się opróżniał lub aby miał jakieś zabezpieczenie przed przepełnieniem? :) Dodano po 14 IMHO nie doszukiwałbym się tutaj problemu ze stosem. Stawiałbym...
Kiedyś na tym forum na pytanie dla czego spóźnia mi się sekundnik z timera otrzymałem odpowiedź że w bascomie każdorazowe użycie "wait" używa jednego timera, a co za tym idzie blokuje inne.Ktoś mi wtedy polecił zmianę instrukcji "wait" na pętlę zakańczaną przepełnieniem zmiennej z przerwania timera którego używam.Tak więc z własnego doświadczenia znam...
Zakładając, że problem jest z przepełnieniem stosu - jak temu przeciwdziałać? Czy tylko i wyłącznie "przemyslana" konstrukcja programu? Radzio
Nie będzie się gryzło, dopóki obsługa przerwań będzie trwała krótko. Oczywiście inne przerwanie i czas jego obsługi wprowadzi pewien jitter do obsługi dugiego przerwania, w efekcie pomiary ADC nie będą co ściśle określony czas w każdym przypadku, a jedynie statystycznie. Jeśli to przeszkadza można zastosować nieblokującą obsługę przerwań (ISR_NOBLOCK),...
Czego nie rozumiesz? 0. Ładujesz wartość do licznika i czekasz na przepełnienie. 1. Przepełnienie generuje sygnał przerwania. 2. CPU musi dokończyć instrukcję, odłożyć na stos adres do powrotu i załadować nową wartość do PC. W tym czasie licznik T0 nadal liczy i czas mija. 3. Skok pod adres wektora przerwania i wykonanie prologu funkcji obsługi. Czas...
Witam, proszę o pomoc: buduje sterownik na zasadzie włącz/wyłącz, to akurat nie jest w tym momencie ważne :), ale przejdźmy do szczegółów - ma pobierać dane z 4 czujników DS18B20, sam odczyt działa poprawnie, problem zaczyna się w menu, do kroku "2.2" czasem "2.3" wszystko działa poprawnie, lecz z "2.2" i naciśnięciu 'dalej' (lub "2.3") przeskakuje...
A moje pytanie, czy przy takim algorytmie, pomimo tego że nie wykorzystuje przerwań a na pinie mam częstotliwość którą chciałem procesor będzie miał jeszcze "czas" na po prostu realizację programu ? Czy tak skonfigurowany timer wykorzystuje procesor ? Widzę że timery to twoja słaba strona, więc napiszę ci troche ... Wszystkie timery w AVR mają możliwośc...
Nie wnikałem w kod, bo Bascomowcem jestem, ale sprawdź go pod kątem poprawności wychodzenia z podprogramów i procedur. Może masz gdzieś nawarstwianie się stosu i następuje jego przepełnienie po pewnym czasie?
Wygląda na przepełnienie stosu. Kilka sugestii jak to wykryć: http://www.avrfreaks.net/index.php?name=...
Patrzę na ten twój kod i się zastanawiam po jakim czasie procesor się zawiesza. Stosowanie komendy GOTO wywołującej skok do głównego programu w podprogramie może spowodować przepełnienie stosu. Procesor będzie odkładał na stos adres programu przy wywoływaniu podprogramu, ale już go ze stosu nie zdejmie, tylko będzie wykonywał dalszą część programu znajdującą...
Układ testuję na płytce uruchomieniowej, zasilacz stabilizowany, źródło impulsów generatorek na LM555, żadnych silników w pobliżu. Przepełnienie stosu chyba nie wchodzi w grę ? A może sposób kompilacji jest istotny (poziom optymalizacji uzywam -0s ) ? W ostatecznosci moge wykorzystać WDT ?
Witam Odświeżę wątek. Dodałem układ UDN2981A pomiędzy Atmege a wyświetlacze, wyrzuciłem tranzystory które sterowały anodami oraz ich rezystory z baz. Działa całkiem nieźle. Jest jedno ale... jasność. Steruje to takim kodem: [syntax=basic4gl] '************ Zegar 6 wyswietlaczy LED + PCF8563 $regfile = "m32def.dat" $crystal = 8000000 $hwstack = 64 ' rozmiar...
pisałem w CodeVisonAVR i bascomie i w zasadzie nie widzę różnicy jeżeli chodzi o zajetość programu i szybkość. Wszystko zależy od programisty jak pokieruje swój program i podejdzie do sprawy. Oba języki działają na podobnej zasadzie, czesto różniąc się tylko samym sposobem zapisu instrukcji, bo w zasadzie kod się pisze na podobnym poziomie abstrakcji....
A jesteś pewien, że ten bufor na 100% jest we flash'u? Pisząc bufor - sugerujesz że jest to tablica zmiennych, która na bierząco pośredniczy w wymianie danych. Jeżeli tak - bufor ten musi znajdować się w ramie. W przypadku AVR nie ma możliwości zapisywania do flasha z pozoimu programu (można to tylko zrobić z sekcji bootloadera). A co mówi kompilator...
Witam serdecznie. Ostatni kod przepisałem żywcem z książki "Programowanie mikrokontrolerów w języku BASCOM" autorstwa Marcina Wiązania. Dioda miga ciut za wolno. Tu mi ręce opadają, dlatego zwracam się do Was o pomoc. Kod: Nie wierzę w to co napisałeś!!! Autor ksiązki nie zrobiłby takiego błędu... Podajesz błędne instrukcje, i oczekujesz poprawnej...
Witam Z ciekawości uruchomiłem czujnik MPU6050, kod wykorzystałem z jednej z niemieckich stron - poniżej. Nie jestem pewien, czy kod jest poprawny, bo wyniki są bardzo "ruchliwe". Tzn. gdy płytka czujnika leży nieruchomo na stole to wyniki się zmieniają i o to sporo. Przykładowo: Accx zmienia się od np 10 do 270 Accy cały czas jest duże - nawet ponad...
Wszystko zależy od sposobu napisania programu obsługi przerwań i wywołań pod programów. Jeśli wykonasz to prawidłowo zmienne i adresy powrotu zostaną pobrane ze stosu. jeśli jednak pozostaną stos rośnie aż przepełni ram. Dobrą praktyką jest symulowanie programu i zwracanie uwagi na wskaźnik stosu który powinien po zakończeniu obsługi pod programów i...
W 99% przerywanie przerwań to bardzo zły pomysł, kończący się przepełnieniem stosu i najdziwniejszymi błedami. Jest to możliwe ale bardzo nie polecam :)
Zmien na gosub na goto bo sie stos przepelnia. Z gosuba trzeba wrocic i sie zwalnia pamiec, jakos tak .... ps. jako "bascomowcy" mozemy tego nie wiedziec ;)
Napisałem parę programów do tego urządzenia, w których nie było w ogóle instrukcji gosub tylko same instrukcje return i ciągle to samo. Może cos z przepełnieniem stosu, lecz wyznaczyłem w innym programie adresy pamięci w których mają być zapisywane i nadpisywane zmienne. Możliwe że lm7805 się przegrzewa i zawiesza układ. Zdaje mi sie że to nie wina...
Witam W oparciu o kod znaleziony na forum Elektroda mam programik wyświetlający adresy układów w magistrali I2C ( TWI ). Kod jest taki: $regfile = "m8def.dat" 'definicja procesora $crystal = 4000000 'taktowanie procesora $hwstack = 32 ' rozmiar stosu sprzętowego $swstack = 10 ' rozmiar stosu $framesize = 40 ' rozmiar ramki Config Debounce...
przepełnienie stosu przepełnienie stosu bascom przepełnienie stosu stm32
ładowarka trakcyjna dioda muzyke astra kostka stacyjki
webasto chińskie pralka samsung zawiesza
Analiza kształtu fali T w EKG: parametry i znaczenie kliniczne Metody analizy kształtu odcinka ST w EKG