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....
O ile pamiętam istnieje możliwość w keilu ustawienia wierzchołka stosu. Spróbuj go poprostu zwiększyć, standardowo był ustawiany na 0x....200 zmień na przykład na 0x....1000. Moją odpowiedź oparłem o kompilator realview bo w uvisione możesz wybrać jeszcze 2 inne kompilatory keila oraz gcc.
Przetestuj printf("%6d",_get_keys()); na konsoli RS wywolane nie w przerwaniu. Cos w Keilu kojarze ze trzeba jakos oznaczyc funkcje ktora bedzie wywolywana z przerwania. pozdrowniam
Przepełnienie stosu.
Jaki system, jaki word jakieś szczegóły? Jak internety odłączone też tak robi?
oczywiście że tam nie wróci! zobacz - wyobraź sobie że działa ci twoja procedura nic i nagle w trakcie jej działania przychodzi przerwanie dowolne. Procek zapamiętuje dokładnie ten adres w którym aktulanie wykonuje instrukcję na stosie i przechodzi o obsługi tegoż przerwania. Gdy zakończy procedurę przerwania to rozkaz reti spowoduje zdjęcie ze stosu...
Nie, Tiny13 ma tylko 64 komórki RAM, działanie zmiennych zależy od ustawień $hwstack - stos sprzętowy i $swstack - stos programowy. Ogranicz oba parametry do 8 lub 4, ale trzeba uważać z wywoływaniem podprogramów, aby nie przepełnić stosów. Także dyrektywa $TINY ustawia parametry środowiskowe, ale uniemożliwia wywołanie podprogramów.
Witam Kontynuuję zabawę z przerwaniami (Attiny13). Jednak mam pewne wątpliwości... Czy procedura jest ok? ISR(TIMER0_COMPA_vect)//chyba ok, ewentualnie: _COMPB { } Linkier daje ostrzeżenie... 'TIMER0_COMPA_vect' appears to be a misspelled signal handler Nie widzę błędu... ;\ Podczas symulacji dostaje błąd: AVR Simulator: Stack...
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...
1. W jakim celu konfigurujesz liczniki, wpisujesz im wartości początkowe, a potem wywołujesz ich zatrzymanie przez STOP TIMER0/TIMER2 skoro nigdzie indziej ich ponownie nie uruchamiasz? 2. Jakim cudem kompilator nie protestuje gdy w pętli głównej umieszczasz samo ON TIMER0/TIMER2 nie podając trzeciego słowa kluczowego GOTO/GOSUB i ostatniego ich parametru?...
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...
Generalnie to stawiałbym na coś z poniższej listy: 1. Kolizje stosu z innymi danymi (obszarem dynamicznym lub normalnymi danymi) - jest dosyć nieprzejrzyście zdefiniowany, więc się w to nie wgłębiałem. 2. Przepełnienie stosu - może dla któregoś z trybów jest zbyt mały 3. Używanie danych, które powinny być zainicjalizowane a nie są (brak inicjalizacji...
Witam , nam problem instaluje win98 na celetronie 300a (128M ram) przy pierwszym restarcie wyskakuje przepełnienie stosu lub błąd krytyczny -zmień ustawienia STACKS w pliku CONFIG.sys . Co powoduje te błędy i jak zmienić te ustawienia .
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...
Podejrzewam że leśli ten sam błąd występuja na 2 kompach to raczej wyklucza problemy sprzętowe.(oczywiście niekoniecznie) Jeżeli jeśli jest na nich identyczny soft to może być to wina softu. pomocny przy takich problemach będzie Norton Win Doctor. Napisz coś więcej jakie konfiguracje? Jaki soft? jeżeli identyczne to może być to wina jakiegoś nieodpowiedniego...
(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...
dawid512 : ?. "CLI" blokuje wywoływanie przerwań, ale nijak nie przekłada sie na równoważność z wyjściem z funkcji. dreidel : Funkcji obsługi przerwania napisanej w C nie opuszcza się przez reti - wtedy tylko możesz spowodować przepełnienie stosu (na stosie zawsze są odkładane co najmniej 2 rejestry), zresztą powracasz nie do miejsca, w którym nastąpiło...
Poza stosem w SRAMie masz jeszcze przynajmniej: - stertę - dynamiczna alokacja (malloc, new) - sekcję data - wszelkie globalne i statyczne zmienne inicjowane jakąś wartością - sekcję bss - jw. ale zerowane przy starcie programu poza tym możesz sobie tworzyć własne sekcje, latać wskaźnikiem po pamięci i cokolwiek Ci przyjdzie do głowy. Alokowanie dużej...
Jaką masz wersję win7 32 czy 64 bit?
Trzeba zadbać samemu, w tej klasie uC nie masz detekcji przepełnienia stosu.
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ż...
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:...
Jeśli Call to wywołanie funkcji z odkładaniem adresu powrotu na stos, to doprowadzasz do przepełnienia stosu.
Czytać ze zrozumieniem ! CZEKAJ: MOV R0,#255 MOV R1,#255 ODLICZAJ: ODLICZAJ1: DJNZ R0, ODLICZAJ1 ; ODLICZAJ2: - to przeszkadza Atomowi DJNZ R1,ODLICZAJ1 - zalozmy, ze kosmetyka ; DJNZ R0,ODLICZAJ1 - to przeszkadza Tobie RET ... Jeszcze zmiany w: START2: SETB P2.0 ; wylacza MOV R2,#39 odliczaj_czekaj1: ; LCALL ODLICZAJ_CZEKAJ...
Na 99.9% Twoje problemy nie są zawinione przez Keila. Obstawiałbym przepełnienie stosu, ale nie widząc kodu trudno coś wymyślić.
Zdebugowałem problem, obecnie występuje przepełnienie stosu w wewnętrznym pomiarze temperatury. Poprawka jest taka sama, jak w S3. Z jakiegoś powodu, po włączeniu CONFIG_ESP_CONSOLE_USB_CDC, po jakimś czasie pojawia się błąd 43. Ponadto mój fałszywy S2 nie łączy się po wyjęciu z pudełka, musiałem ustawić txpower na 10 (powersave 0 10) w komendzie startowej.
Nie rób zmiennych ze stałych - first i last są zbędne. Nie deklaruj tablic wewnątrz funkcji - spowalnia to wykonanie i grozi przepełnieniem stosu. Nie potrzebujest wskaźników na bufory 15- elementowe - przedeklaruj je jako wskaźniki na char.
Nie znam tej biblioteki, pół minuty temu pobrałem jej źródła, ale z tego co patrzę, to struktura FILINFO zadeklarowana jakoś tak: [syntax=C]// FatFS R0.08b, ff.h typedef struct { DWORDfsize; /* File size */ WORDfdate; /* Last modified date */ WORDftime; /* Last modified time */ BYTEfattrib; /* Attribute */ TCHARfname[13]; /* Short file name (8.3 format)...
ściagnalem sobie kultowa gierke Lotus 3 ze stronki www.klasyka.do.pl i nie chodzi - błąd przepełnienie stosu. Probowalem odpalac na win xp i spod dosa - to samo - buuuuu
Myślałem, że skoro nie przekazuję żadnych argumentów do tej funkcji sleep_rec(), to nie powinno być problemu z dokładaniem ciągle nowych danych? Samo wywołanie też jest odkładane na stos, żeby procesor wiedział gdzie wrócić. W Twoim przypadku nigdy nie wychodzisz z rekurencji więc w 100% przypadków dążysz do przepełnienia stosu. Robiłeś to pewnie tylko...
To proste. Przepełnienie stosu -> wyjątek.
Gdziekolwiek, szklana kula by pomogła. Z braku wskazówek warto pomyśleć o przede wszystkim błędzie w programie, przepełnieniu stosu lub braku pamięci. Zauważ, że 58% zajętej pamięci RAM dotyczy wyłącznie zmiennych statycznych i globalnych, jeśli intensywnie używasz zmiennych lokalnych i stosu (np. wielokrotne wywołania funkcji i intensywne korzystanie...
Jest możliwy, trzeba tylko dbać o to aby nie przepełnić stosu.
Być może to przepełnienie stosu... Jeszcze popracuję i dam znać.
Złe. Widzisz przecież błąd sumy kontrolnej i przepełnienie stosu.
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,...
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 Chciał bym się dowiedzieć na temat skoków do podprogramów i wykonywania tam operacji z użyciem dodatkowych pętli. Przypuśćmy że mam główny program w pętli DO...LOOP, który wykonuję daną operację. Po pojawieniu się jakiegoś warunku program skacze poprzez GOSUB i zaczyna wykonywać podprogram który też znajduje się w pętli. Po spełnieniu warunku...
Witam. Czy istnieje jakiś program lub sposób aby sprawdzić ilość skoków (głębokość) do podprogramu CALL RETURN... ? Np. wyświetlić w formie drzewa z pliku .asm lub .hex. Chodzi o to żeby szybko podejrzeć czy nie nastąpi przepełnienie stosu.
Problem który wykrywa pokazany fragment to po prostu przepełnienie stosu. Jesteś na 100% pewny, że to nie ta przyczyna? Jakiś spory bufor na stosie czy coś w ten deseń? BTW - zamiast pary `__disable_irq();` + `__enable_irq();` proponuję użyć obiektu `distortos::InterruptMaskingLock`. Nie wyłącza on co prawda wszystkich możliwych przerwań, a jedynie...
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...
Drgania styków to "oczywista, oczywistość". Czy wyeliminujesz je programowo czy sprzętowo to juz twoja sprawa. Pamiętaj, ze przerwanie od poziomu musi byc blokowalne (SIGNAL lub ISR bez atrybutów) w przeciwnym wypadku przepełnisz stos.
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.
Wygląda na przepełnienie stosu. Kilka sugestii jak to wykryć: http://www.avrfreaks.net/index.php?name=...
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.
Takie wychodzenie z przerwania to gwarantowane przewalenie stosu i program w lesie każde wywołanie przerwania odkłada coś na stos czego potem nikt nie zdejmuje efekt przepełnienie stosu i ....
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...
Przepełnienie stosu często jest skutkiem rekurencyjnego wywołania funkcji (gdzie pamięć stosu kończy się zanim dojdzie do warunku kończącego rekurencję). Zakładam, że korzystasz z rekurencyjnego algorytmu do liczenia NWD. Zastosuj inny.
Ja bym tu stawial najpierw na ilosc zmiennych lokalnych poniewaz w prograramie napisanym przez EdW jest zmieniana wartosc zmiennej ktora jest wysyla od razu do tda. U mnie jest tak ze zmieniana jest wartosc zmiennej ktora jest pozniej podstawiana do zmiennej ktora jest wysylana do tda(troceh zakrecona). W nestepnej kolejnosci stawialbym na ilosc procedur...
ciekawa sytuacja, bo chociaż objaw jest typowy dla przepełnienia stosu to jednak pokazany program przecież stosu nie przepełni :P ale kiedyś udało mi się zepsuć makefile tak że kompilowało się dla jednego procesora a dołączało startup code z parametrami innego i wtedy jakiekolwiek użycie stosu też powodowało katastrofę. pewnie jednak w AVRStudio nie...
Co może być przyczyną tego, że zamiast wysyłanego "hello" odbieram w termianlu "hhhhheeeeeellllllllllllllllllllloooooo"... Dodam, że przy wyłączonym DMA nic takiego nie ma miejsca. Nie wnikam w konfigurację DMA i USART, ale logika tego fragmentu programu jest dziwna. Mam wrażenie, że funkcja wysyłająca tekst (usart_dma_str) jest wywoływana w przerwaniu...
Średnio chce mi się analizować ten kod, ale jeśli załączasz przerwania w przerwaniu od INT1 po wcześniejszym wyłączeniu przerwania od INT1 - jest poprawnym rozwiązaniem, gdyż nie ma możliwości wejścia do funkcji przerwania od INT1 podczas jej wykonywania niezależnie od okoliczności; tak ponowne zezwolenie na przerwanie od INT1 bez wcześniejszego zablokowania...
FreeRTOS udostępnia funkcję, która sprawdza stan stosów i to w dwóch wersjach. Jeśli nastąpi przepełnienie stosu któregokolwiek taska wtedy RTOS wywołuje callbacka. W demach są też przykłady z wyświetlaniem stanu tasków w tym stosów poprzez http.
'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...
Poniższy zapis: ISR (INT0_vect) { } Oznacza, że deklarujesz funkcję/kod obsługi przerwania INT0 trybie blokującym (ISR_BLOCK). Oznacza to, że jeśli w trakcie wykonywania funkcji obsługującej przerwanie INT0 pojawi się inne przerwanie, np INT1 to nie zostanie ono obsłużone. Rozwiązaniem może być deklaracja ISR z atrybutem ISR_NOBLOCK....
Dziękuję kolego za chęci, niestety faktycznie nie znasz Bascoma ;-), ponieważ odpowiedzi na Twoje postulaty są zawarte w programie. Tak, czekam odpowiedni czas na odczyt. Obstawiam na jakieś przepełnienie stosu itp. Jakieś pomysły ?
Niezbyt to mądre pytanie. Bo co to ma niby znaczyć "w programie głównym będziemy używać przerwań"? Ale odpowiedz sama się nasuwa. Może nastąpić przepełnienie stosu. PIC-e nie mają normalnego stosu tylko specjalny stos sprzętowy umieszczony nie w głównym RAMie lecz w osobnych rejestrach. I każdy tym PICa ma określoną długość (głębokość) tego stosu. Za...
Dziękuję za podpowiedź. Prosiłbym (bo jestem nowicjuszem) o wskazówki jak przenieść menu do pamięci programu czyli jak rozumiem flash. Kompiluję w AVR Studio 6.1 i co zrobić żeby nie przepełnić stosu? Z góry dziękuję.
1. masz kod źle zorganizowany, np. setup() woła rekurencyjnie setup(), a to daje przepełnienie stosu, w loop() masz swoją wieczną pętlę. Mam swoją prywatną zasadę: kod który niefajnie wygląda, jest prawdopodobnie błedny. 2. co masz drukowane na Serial ? może jest coś pozwalającego na diagnozę
Głowy nie dam, ale GOSUB odkłada na stos wskaźnik do miejsca skoku oraz chyba rejestry. Robienie wielu zagnieżdżonych skoków spowoduje w końcu przepełnienie stosu. Robienie ich równolegle nie szkodzi. Jedynie, na czym utracisz co do pamięci, to instrukcja skoku i powrotu - kod wykonywalny zajmie po prostu więcej.
Zdaję sobie z tego sprawę. Ale gdzie jest stos. Jeżeli za bardzo nie przekombinowałeś, to jest tam gdzie był - czyli wskazuje na RAMEND, czyli konieć pamięci SRAM wbudowanej w procesor i z wielu dobrych powodów tam powinien zostać. To z kolei daje pewne ograniczenia - zmienne automatyczne nie powinny być zbyt duże, bo przepełnią stos, a większe obiekty...
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.
nie - przepraszam. Ten krótki programik działa. Więc może faktycznie to przez to przepełnienie stosu. ----- chyba poprostu kupie mikro o wiekszej pamieci i wtedy sprawdze. Dzięki wszystkim za pomoc. Jesli jeszcze macie jakieś pomysły na zmianę tego kodu tak aby się nie zawieszał to proszę pisać. Pozdrawiam
Witam, w sumie nie używam w programie komendy gosub. Czy wywoływanie procedur (podprogramów) może powodować zapętlanie się programu, przepełnienie stosu i w skutek tego zwieszanie, resetowanie? Czy wywołanie tego typu: podprogram(); wymaga jakiegoś specjalnego "wyskoczenia"? (odpowiednik return w gosub) Jak to sprawdzić - ten stos, jak go zresetować?...
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...
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 ?
W programie masz błąd, skok do nieistniejącej etykiety (miejsca) "gotoXY", który będzie powodował błąd przy kompilacji. Sprawdź odwołania do pozostałych etykiet. Kolejny problem to zapętlenie programu na początku, skok do "inicjalizacja_LCD" zaraz po tej etykiecie. Spowoduje to przepełnienie stosu, oczywiście program i tak nie będzie działał bo dalej...
phiter Zdaża się... Z mojej skromnej wiedzy o układach cyfrowo-procesorowych (dawne lata szkolne), jeśli dany bank pamięci nie jest zerowany ani resetowany to w momencie przepełnienia stosu nie ma możliwości wykonywania rozkazów. Wyczyszczenie pamięci i wgranie na nowo wsadu programatorem może pomóc. Ale czy da się to w tym modelu zrobić, to nie wiem
Brutus_gsm : Radził bym Ci przeprojektować trochę ten kod: ustawianie flagi I (sei()) w przerwaniu jest największym błędem (chyba, że wiesz co robisz oraz to kontrolujesz). Przed wyjściem z funkcji przerwania ustawiasz flagę I (jeśli przyjdą kolejne przerwania, pojawią się kolejne wywołania i przepełni się stos - błąd), po czym usypiasz procesor (zakładając...
A 1kB przy 512 to nie tak wiele 1kB pamięci RAM na stos, bo flasha printf zajmuje ze 20kB. Generalnie "sypanie" się programu sugerowałoby przepełnienie stosu, bo wszystkie pozostałe problemy skutkowały głupimi wynikami (typu zawsze zero albo jakieś totalnie abstrakcyjne wartości). 4\/3!!
Dziwny ten twój program. Po pierwsze wywal te swoje procedury obsługi EEPROM i użyj tych z biblioteki AVR-libc, wyeliminujesz jedną z możliwych przyczyn. Poza tym w przerwaniu nie używaj cli i sei, nie jest to potrzebne - wejście w przerwanie automatycznie blokuje kolejne. sei() na końcu może być niebezpieczne, jeśli twoje przerwanie SPI jest za długie,...
szwankowac może z róznych powodów wadliwego zasilania , wadliwej pracy programu , zakłóceń em program może mieć wiele rozgalęziń i akurat przy pewnym ustawieniu może iść w las podmien procesor na inny lub zamień miejscami żeny wykluczyć błedy . Najczęstsza przyczyna jest przepełnienie stosu a potem program idzie w las i zamienia zmienne ;)
Co "toto" jest? ISR_NO_BLOCK(TIMER0_COMP_vect) Wyszukiwarka nie działa? Czemu kolega strzela na ślepo? Ja rozumie "dawno, dawno temu, za siedmioma górami, za siedmioma lasami, gdy nie było Internetu..." Ale teraz? https://www.nongnu.org/avr-libc/user-man... Tak ciężko znaleźć? Przy okazji. Chce kolega koniecznie dziedziczyc...
Witam, Też miałem kiedys pod Windowsem problemy z dźwiękiem i zawsze grałem w dosie. W dosie chodziło mi na spikerze a po zainstalowaniu karty w dosie chodziło mi na karcie muzycznej :) Jednak to byly stare czasy... bo grałęm w to na 486. Może mi ktoś poradzić dlaczego ta gra nie chodzi na nowszych kompach?? Wyskakuje komunikat o przepełnienie stosu....
Heh ale bug. Pewnie przepełnienie bufora albo stosu. :D
robilem sterownik bramy w bascom i przy programie ok 2000 linii to program byl bardziej niestabilny ......... tzn chodzil ladnie a nagle jakeis krzaki na wyswietlaczu (nawet jak ja nic nie robilem) krzaki znikaly i znowu chodzil ladnie az się zrestartowal i wszystko zaczynalo się od nowa Przyczyna - na 99,9% niekontrolowane przepełnienie stosu.
Hmm, jeszcze pomęczyłem bieżącą konfigurację, wspomniane przerzucenie do nowego projektu zrobię na dniach. Póki co użyłem w obrębie FreeRTOS narzędzi do sprawdzania wolnego miejsca na HEAPie oraz posprawdzałem watermarki dla poszczególnych stosów (używam heap_1.c). Wygląda na to, że niektóre taski zostały obdarowane zbyt hojnie, więc można im było zmniejszyć...
Hmm... w końcu używasz WAITKEY, więc zmienna Czekanie nie ma sensu. Dodatkowo: Czekanie = Ischarwaiting() wykonujesz przed obsługą przycisku i jakąś procedurą MAIN. Teraz jeśli w trakcie obsługi przycisku i wykonywania procedury MAIN wyślesz dane to nie zostaną one zapisane w EEPROMie Ja jednak przerobiłbym program i użyłbym INKEY. Sama obsługa...
FreeRTOS potrzebuje, żeby te przerwania były naked, czyli żeby kompilator nie generował ani prologu (zachowania rejestrów i stanu) jak i epilogu (odtworzenia rejestrów, stanu i powrotu z przerwania) - tym wszystkim zajmuje się sam FreeRTOS. W Twoim przypadku następowało przepełnienie stosu, bo kompilator odkładał rejestry przy wejściu do przerwania,...
Po wywołaniu WAIT_KEY kod klawisza masz w akumulatorze i zpisujesz wszystkie "próby" na stosie do czasu aż zakończysz 0x0A. Potem zdejmujesz tylko te dwa ostatnie znaki (0x0A) i ten kod. A wszystkie pozostałe nie są ze stosu zdejmowane. Masz wtedy niezrównoważony stos. Musisz mieć tyle samo rozkazów POP ile PUSH, bo inaczej Ci się stos przepełni dość...
Witam z placu boju nierównego. Krzaczy się niekoniecznie przy 2000. Przy dwustu zaczyna, jak dojdzie do przepisywania stron. Walczył ktoś z tą dokładnie biblioteką? Może jakaś podpowiedź? Jeśli zmienne z tej paczki 20 x 16bitów są zmieniane wszystkie na raz Zmieniane są pojedynczo, paczka 16 x 16 bit lub 4 x 16bit. p.s. Wina była moja-przepełnienie...
Procesor wychodzac z przerwania pobiera ze stosu adres powrotu. Sa to dwa bajty. Jezeli zmienna=1 to odkladamy na stos dwa bajty ktore sa adresem pod ktory ma skoczyc i wykonujemy return (reti). Pozdro Dexter No i przepełnienie stosu gotowe, bo co z tymi już odłozonymi 2 bajtami ? A co z przeważnie zachowywanym SREG ? (to już 3 bajt). Można jeszcze...
Napisz co było problemem, bo jeśli przepełnienie stosu, to zdałbym się w pełni na mechanizmy RTOSa które mają je wykryć. Jeśli coś innego, to napisz co - może coś będę w stanie podpowiedzieć, a jak nie, to czegoś nowego się nauczę (; Nie to nie były problemy przepełnienia stosu tylko bugów w samym RTOSie, ale tak czy siak musiałem namierzyć miejsce...
Wydaje mi się, że powinna tu być użyta instrukcja GOTO zamiast GOSUB. ;) GOSUB bez RETURN może przepełnić stos. (Jeżeli coś pokręciłem to proszę mnie uświadomić). Dodano po 2 Ale nie prościej zrobić tak: do ... loop until przycisk=0 (?)
Trudno zrozumieć jaki sens ma taka funkcja. Wyniki są co najmniej dziwne. Podczas rekurencji funkcja z niewiadomego powodu zmienia wartości wejściowe x i y. Na pewno to typ A nie może być byte ; co najmniej real. Typ x,y myślę żeby dać okrojony bo już przy niewielkich wartościach we. wynikiem funkcji są ogromne liczby. Przy wartościach rzędu 200 następuje...
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ą...
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...
Witam, po wejściu programu w taką pętlę pomiarów ADC: [syntax=c] while( c > bound ) {b = pomiar( PA1 );c = pomiar( PA2 );d = pomiar( PA3 );a = pomiar( PA0 );} [/syntax] program już nie potrafi z niej wyjść. Mówiąc dokładniej, *c* w pewnym momencie staje się mniejsze od *bound*, a mimo tego program dalej zostaje w pętli. Jak sprawdzić, co jest nie tak,...
W przypadku Windowsa 95 osr2 pisze "przepełnienie wewnętrznego stosu spowodowało zatrzymanie tej sesji. Zmień ustawienia STACKS w pliku CONFIG.SYS i spróbuj ponownie
Brakło RAMu pewnie, stos zaczął pokrywać się z obszarem przeznaczonym na zmienne. Albo przepełnienie stosu, jeżeli wywaliło podczas działania programu (na przykład w momencie wywołania jakiejś procedury). Jak to pierwsze, to spróbuj zmniejszyć rozmiar stosu (gdzieś tam w opcjach kompilatora jest), jak pierwsze lub drugie to postaraj się zmniejszyć ilość...
1. Po co sprawdzasz w przerwaniu, które jest zgłaszane po odebraniu danej, czy odebrano daną? 2. Dlaczego wysysasz dane z UARTa pod koniec obsługi przerwania, gubiąc je w ten sposób. 3. Być może jakaś inna część kodu (obsługa innego przerwania) wykonuje się tak długo, że gubisz dane z UARTa. 4. Jeśli masz jakąś procedurę, a w niej zadeklarowaną sporą...
BugCheck 7F , { 8 , 80050031, 6f8, fffff960000b6966} UNEXPECTED_KERNEL_MODE_TRAP ( 7f ) Arg1: 000000000000000 8 , EXCEPTION_DOUBLE_FAULT Double Fault: Podwójny błąd występuje wówczas, gdy zostanie zgłoszony wyjątek podczas próby wywołania obsługi dla poprzedniego wyjątku. Zazwyczaj możliwe jest obsługiwanie kolejno dwóch wyjątków, jednak jest kilka...
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...
W obsłudze przerwania umieścić należy kilka warunków, które będą sprawdzały wartość zmiennej i za pomocą polecenia Goto XXX przeskakiwały do kolejnych pętli. Tak NIE WOLNO ROBIĆ, powoduje to przepełnienie stosu (bo nigdy nie wychodzi z przerwania). Poprawnie można to zrobić tak: Odpowiednie pętle sprawdzają flagi (zmienne) w przypadku udpowiedniego...
Strzelam że przepełnił się stos, program główny zagłębia sie o 7 poziomów, przerwanie o 8 i procedura w przerwaniu o jeszcze jeden. Ale to moje przypuszczenie.
0x7F (UNEXPECTED_KERNEL_MODE_TRAP) uszkodzenie sprzętu / przepełnienie stosu jądra -> Podwójny błąd : http://support.microsoft.com/kb/137539 Te informacje o swoim sprzęcie to skromnie podałeś - nie ma nic o CPU, czy jest podkręcony, model płyty, karta graficzna - AGP ? Czy tylko z dxdiag jest problem?, potestuj jakieś stare dema 3D, tutaj masz np: DX:...
Zabieram się za CAST ale od razu powiem, że nie wykrywa mi składni # http://s28.postimg.org/trmewpgl9/Nowy_ob... Po za tym coś się musi dziać, że dla jednego zapytania 'x/x/x' działa prawidłowo a dla innego nie. -------------------- Zwraca mi właśnie pustą tabele :) Poprawiłem dzięki, nie wiem jak mogłem popełnić taki błąd, nastąpiło...
Assembler stosuje się przeważnie tam, gdzie zidentyfikowano wąskie gardła w wydajności i jest możliwość jej poprawy Czyli innymi słowy size critical (np. bootloader) bądź time critical. nawet na 51 można pisać i często pisze się w C Tylko jak się ma XRAM to trzeba odpowiednio skonfigurować, a jak się nie ma to trzeba ciągle pamiętać o nikłej ilości...
Witam Mam taki problem: Gdy wstawiam breakpoint w procedurze osbługi przerwania, nie ważne w jakiej linii, debuger się zawiesza. Wiem, że kod jest poprawnie napisany, bo bez breakpointa wszystko działa dobrze. Przerwanie, od którego zastępuje procedurę obsługi to 1Ch, czyli Clock Tick. Prawie na pewno nie chodzi o przepełnienie stosu, bo wstawiłem wewnątrz...
może stos sobie przepełniłeś jak program rozbudowany.
przepełnienie stosu bascom atmega przepełnienie stosu deklaracja stosu
przesunięcie liniowe chrysler instrukcje cordoba pompa paliwa
pralka electrolux reset ir2153 bramy
Porównanie przetworników DAC: TDA 1541A vs PCM 56 Jak przestroić radio Diana DST-301 z OIRT na CCIR?