Witam, No trochę jaśniej jest. Ram który przeznaczyłeś na stos jest prawie całym obszarem RAMU mikrokontrolera. 0x1FE4 - wielkość twojego stosu (obliczone wierzchołek stosu(0x1FF0) - początek sterty(0xc). Stosu Ci zapewne nie zabraknie. np. wywołujesz w mainie moja_funkcja(int param1, int param2, char tab[20]) to musisz przy wywoływaniu z przekazaniem...
Nie, zapamiętywanie PC na stosie jest realizowane automatycznie przez procesor. Jeśli dasz naked to musisz tylko zapamiętać modyfikowane rejestry ina końcu dodać RETI. W praktyce z naked cały ISR należałoby napisać w asemblerze. Tak naprawdę dla tak małego procka cały program sensowniej byłoby napisać w asemblerze. Masz 16 rejestrów, byćmoże da się...
Dalsza zabawa ze stosem i rejestrami ;) Zapamiętywanie rejestrów na stosie , oraz ich odtwarzanie. ;składnia pushr A,B i popr A,B ;odkładane i zdejmowane w kolejności od A do B .macro pushr ;max 16 .if (at)0==(at)1 .dw (0x920F & 0xFE0F | ((at)0<<4)) .elif (at)0>(at)1 .dw (0x920F & 0xFE0F | ((at)0<<4))...
Co do programu przedstawionego w załączniku. Strasznie marnujesz czas procesora, powinienes w przerwaniu wykonac kilka instrukcji a ty wykonujesz wszystko. Uboczną stroną jest jescze to ze musisz zapisywac wykorzystywane rejestry na stosie i "uziemiasz sobie licznk 0" Proponowałbym taki sposób: czujnik dołaczasz do wejscia into lub int1 ustawiasz na...
Pierwszy i bardzo poważny problem zauważyłem w funkcji TIMER1_COMPA, jest nim linijka rjmp uspij. Gdy się wykona, to przerwania pozostaną zablokowane, oraz kilka bajtów na stosie zostanie uwięzionych - głównie adres powrotu z przerwania. Można temu zaradzić poprzez wstawienie pop + pop + sei przed rjmp. Drugi problem, to karygodna pętla główna - dławienie...
Zapytaj profesora (ma tytuł profesora?) po co ta wiedza? 8253 ciężko już kupić (bi i po co, chyba, że ktoś chce składać PC XT), 8051 jest coraz mniejszy wybór. Biorą pod uwagę czas nauki i zmiany na rynku elektroniki, w szkole powinni uczyć o najnowszych uC a nie tego, czego za 5 lat nie będzie na rynku. Każdy współczeny uC zawiera bardziej zaawansowane...
(at)ElektrodaBot Poniżssy kod asemblera dla FASM jest chyba tylko w wersji 32-bit. Popraw kod na wersję 64-bit: use32 ORG equ $80037490 macro LOAD arg0, arg1 { lea arg0, Bezpośrednia odpowiedź Nie mogę przepisać tego fragmentu 1:1 na gotowy kod x64, ponieważ to nie jest zwykły „port FASM z `use32` na `use64`”, tylko kod do inline-hookingu i patchowania...
Super obudowa :D Zrobiłem krótką animację pokazującą w jaki sposób przenoszone są programy z pamięci ROM do pamięci RAM z wykorzystaniem przełącznika banków pamięci. Wobec tego jak umieścić w ROM np. taki kod. ; Program deasemblera Z80 ; Dane interpretowane przez program deasemblera PFTAB DEFB E0,0A,0E,0F,96,AF,B4,B9,BE,BD,C5,09,4C,C...
Nie każdy wykonuje jedynie powtarzalne obliczenia. Do liczenia czegoś na szybko bez przygotowanej formułki kalkulator jest lepszy. RPN jest dla mnie bardzo wygodny, o wiele lepszy niż algebra, wynik zostaje na stosie i można nim dowolnie manipulować (albo zostawić go tam i niech czeka tam na swoją kolej, jak stos jest wystarczająco duży to nie ma problemu),...
Mam pytanie odnoście AVR Studio, programuje w gcc z kompilatorem WinAVR i muszę wykonać przerwanie i zależy mi na czasie wykonania przerwania. Tutaj moje pytanie, czy są jakieś opcje kompilatora, które wyłaczają wysyłanie rejestrów na stos przy przerwaniu? Bo wysyłanie i odbieranie rejestrów nawet tych których nie używam w przerwaniu trwa dłużej niż...
W Zmienne globalne — wiedz, kiedy są modyfikowane Zmienne globalne muszą być ostrożnie obsługiwane, gdy są używane z przerwaniami, ponieważ te są generalnie asynchroniczne. I jeżeli zmienna globalna jest modyfikowana przez ISR, może zostać zmieniona w dowolnym momencie. Musimy mieć na uwadze następujące aspekty: Odczyt/zapis zmiennych globalnych...
Mówiłem o zbyt małym stosie i wciąż to podtrzymuję. W tym skrypcie, który jest wg Ciebie "dobry", stos jest skonfigurowany na cały wolny ram, w skrypcie który oceniasz jako "zły" - zaledwie 1kB. Łatwo sprawdzić, czy stos nie najeżdża na dane, bo wystarczy w tym krytycznym momencie zobaczyć jaka jest wartość rejestru r13 (sp) i porównać go z adresami...
Kompilator najpierw na stosie rezerwuje miejsce na tablicę, potem funkcji itoa przez rejestry procesora ( lub przez stos) przekazuje wskaźnik( adres ) do tej tablicy. Funkcja itoa zwraca wskaźnik też przez rejestry i ten sam wskaźnik dopiero przekazywany jest do funkcji LCD_WriteText(). Z tego względu, że miejsce dla tej tablicy jest rezerwowane na...
Wskaźnik zawierający adres 0 - bez wątpienia pojawią się dziwne rzeczy: w przestrzeni pamięci pod adresami 0-31 dostępne są rejestry procesora, więc komórka eq przekazywać do funkcji wskaźnik na tablicę, przez co tablica może zostać utworzona na stosie przez funkcję nadrzędną i wypełniona przez aktualną funkcję. Nie trzeba żadnej globalnej tablicy,...
Witam Próbuję właśnie "zmusić" zestaw AVT-2250 do współpracy z językiem C. Używam kompilatora SDCC oraz środowiska Code::Blocks. Przygotowałem sobie plik nagłówkowy bios.h oraz plik bios.c (wszystko w załączniku, łącznie z projektem), aby było łatwiej wywoływać procedury zaimplementowane z BIOSie komputerka. O ile z napisaniem obsługi przerwania w asemblerze...
Mikrokontrolery 32 bitowe zawojowały rynek, jednakże ich 8 bitowi przodkowie nadal są równie popularni na rynku, co 32 bitowe układy. Układy 32 bitowe o szerokim wachlarzu peryferiów, są idealnymi kandydatami do wielu aplikacji, co tłumaczy czemu są tak popularne wśród projektantów systemów elektronicznych. Projektanci wiedzą, że kompleksowe i skomplikowane...
Z tym językiem angielskim to różnie jest to co wyszukałem push - zapisuje na stosie dwa rejestry r30 i r31 (które stanowią Z) ale po co przecież są puste? ldz - wpisuje do rejestru obie pozycje z kody7seg ale które ? add r30,r16 dodaje oba rejestry, a wynik wpisuje do r30 (to rejestr do którego w programie głównym wpisywane są cyfry od 0 do 8) brcc...
Witam, Mam drobny problem z wyrabianiem się w czasie na Atmedze8 z wewnętrznym zegarem 8MHz (zewnętrzny kwarc niestety nie wchodzi w grę ze względu na ograniczenie miejsca na PCB). Ogółem piszę w C, ale procedury dla których czas wykonania jest ważny napisałem w asmie. Problem jest taki, że nie wiem jak użyć ich jako przerwań, poza rozwiązaniem polegającym...
Czy na prawdę nikt nie wie jak korzystać z tej biblioteki Jeśli się nie zna asemblera - kapota :( $lib "modbus.lib" $external _crcmb Dim Bajtow As Byte Dim Dane(10) As Byte , Mbcrc As Word For Bajtow = 1 To 10 'wypełnianie tablicy danymi Dane(bajtow) = Bajtow Next Bajtow = 10 'tu można(dla spokoju ducha) zachować rejestry...
Stos w '51 jest analogią stosu talerzy (np. po zmywaniu a przed wycieraniem, przy założeniu że nie masz suszarki :-)) Najpierw myjesz i kładziesz jeden na drugim a następnie zdejmujesz od góry (czyli nie możesz wyciągnąć nic ze środka). Ostatni talerz umyty jest jednocześnie pierwszym wytartym. Konkret. PUSH ACC kładzie na stosie akumulator, PUSH B...
Po pierwsze to zależy na jakim procku to masz napisać, komendy trzeba sobie przejrzeć jakie są dostępne i na tej podstawie coś próbować zrobić. Nie wiadomo, jakie instrukcje są wykonywane więc ciężko ułożyć jakiś scenariusz. Wywołanie podprogramu zapisuje się na stosie, a to ile dokładnie zajmuje ten narzut (przynajmniej adres powrotu z podporgramu...
Ja tu widzę że teraz mało kto zdaje sobie sprawę co to jest stos i do czego służy. W bibliotece ST jest sporo funkcji które tylko i wyłącznie wywołują kolejną. Wydaje się że ok. ale teraz pomyśleć że za każdym razem trzeba odłożyć rejestry na stosie a w drodze powrotnej przywracać. Marnotrawstwo cykli zegarowych a tym samym energii elektrycznej. Kolejna...
register unsigned char counter asm("r3"); Ale jak wskazać kompilatorowi aby używał zarezerwowanych rejestrów w konkretnej funkcji? Zresztą metoda bardzo zła bo ogranicza kompilatorowi ilość dostępnych rejestrów, a problemem jest fatalnej jakości kod. Żadne mikro optymalizaje tu nie pomogą. Należy napisać, albo znaleźć porządny kod. Proszę o cudowny...
Korzystając a Xmega nie potrzebujesz przerwań do obsługi operacji I/O. Po prostu skonfiguruj Event system na wywołanie transferu DMA między SRAM a portem będącym odpowiednikiem linii DTA. Jeżeli dodatkowo potrzebujesz korektę z linii adresowych, to wykonujesz transfer z linii ADR na rejestr indeksowy i w następnym takcie DTA do SRAM (czy odwrotnie)...
Ale to nie oto chodzi. Program się mieści, po kompilacji podaje Ci tylko ile w RAM (data) zajmują zmienne zdeklarowane bodajże jako zmienne statyczne (zaraz ktoś mnie opieprzy- i słusznie- że podaję to niedokładnie). A w każdym wywołaniu funkcji zmienne lokalne są umieszczane na stosie. Każde przerwanie umieszcza na stosie w prologu rejestry itp. Jak...
Przecież z każdego wyjątku można wrócić tam gdzie został on wywołany - adres powrotu (zwykle przesunięty - pipeline) jest przecież w rejestrze LR... Adres powrotu jest na stosie a w LR jest wartość informująca procesor o zakończeniu obsługi wyjątku oraz tryb procesora i rodzaj stosu jaki był przed wywołaniem wyjątku. W NVICU są jeszcze rejestry zawierające...
Dokładnie, wyskakiwanie z procedury obsługi przerwania powoduje, że za każdym razem na stosie pozostają odłożone rejestry i adres powrotu. Nie ma siły, w końcu to wszystko musi się zwiesić. Jeśli już kolega musi tak nieelegancko to oprogramować to proponuję całe ISR napisać w assemblerze i odtwarzać wskaźnik stosu przed wyskokiem z ISR. W C właściwie...
No tak rzeczywiście zanim to napisałeś to rzuciłem okiem na asm, co się okazuje hmm: zarówno gdy jest volatile czy bez volatile to wskaźnik umieszczany jest w parze rejestrów r31:r30 - ale z tego co widzę to do tych rejestrów ładowana jest chyba jakaś pozycja zlokalizowana w pamięci RAM tyle że na stosie - wskazywana przez rejestr Y eec:e9 81 lddr30,...
Robię kolejno zadania z książki Gałki: "Podstawy programowania mikrokontrolera 8051" i natrafiłem na polecenie, aby narysować zawartość stosu w momencie schowania setek. Moje pytanie brzmi, czy mogę zrobić to, jak nie posiadam płytki dsm-51? Mam tylko popularny symulator jagoda, na którym nie ma jako takiej pracy krokowej i mogę odczytać zawartość końcową...
Cos takiego powinno działac , musisz pokombinować. SP to stack pointer czyli wskaźnik stosu,a stos to chyba wiesz co to jest :) SPL określa młodszy bajt SP. Instrukjca nosave powoduje że na stos nie beda wrzucane zadne rejestry robocze. SREG to głowny rejestr kontrolny . Proponuje zajrzeć do pdfa z opisem układu. SREG.7 wskazuje na 7 bit w tym rejestrze....
Wybacz przyjacielu ;) , ale ten kod to "obraz nędzy i rozpaczy" i ma się nijak do Twoich założeń , a tym bardziej do zasad programowania 51-ek :( CLR P1.3 ;zerujesz P1.3 ??? LJMP PETLA_OTWARCIA PETLA_OTWARCIA: ;SPRAWDZA CZY JEST SYGNAL ("0") NA P1.3 ;ano jest "0" , bo sam je tam wpisałeś JB P1.3,PETLA_OTWARCIA ;JESLI...
Chyba nie do końca, ponieważ adres powrotu jest jednak w LR ponieważ instrukcją wyjścia z tej procedury jest: bx r14. Ale coś w tym jest że poprzez instrukcję: orr r14, #0xd modyfikuje się dodatkowo tryb pracy. Ale nadal nie rozumiem jak w tym r14 pojawia się właściwy adres - adres nowego tasku - do którego został procesor przełączony. Rozumiałbym gdyby...
jak to nie ingerujesz w stos panie kolego??? przecież wiesz, że rcall ingeruje w stos? prawda? tu się zgadzasz? ..... ale nie wiesz właśnie chyba tego że samo wywołanie przerwania to tak jakbyś zrobił rcall do jego obsługi - tyle tylko że ten rcall za ciebie robi sam procek i on tak jak w przypadku rcall odkłada na stos adres powrotu z obsługi przerwania...
A poprawił Kolega :D, A kolega to napisał takiego slave w 3 dni? Nie mam potrzeby pisania slave-a, a w poprzednim wątku atrakcyjnej oferty nie dostałem A jaka byłaby atrakcyjna? No i ofertę to skład się zamawiającemu a nie zamawiający. Zawsze tak było jest i pewnie będzie. Czxy to w sklepie, czy na przetargu czy też na aukcji, no chyba, że kolega zmieni...
Witam!!! Z moich osobistych doświadczeń wynika że AVRy (Atmega) radzą sobie całkiem nieźle z zakłóceniami. Dobre zasilanie to już pół sukcesu. Nie ma idealnych procesorów. Projektanci procesorów nie tworzyli by Brown-out detector i watchdoga gdyby nie były one przydatne i nie minimalizowało to prawdopodobieństwa zmiany wartości na stosie lub w rejestrach...
To że x (gdy nie będzie zoptymalizowane ) powstanie na stosie jest oczywiste. Ale stos także jest w pamięci. Owszem nie cały czas, ale że się tak wyrażę szczytowe zużycie pamięci jest większe. Koncepcyjnie rejestry także są swoistym powiększeniem pamięci. Jeśli siedzi w nich jakaś zmienna, to nie może tam być inna ;-) Więc w jednym i drugim przypadku...
Witam Jak rozwiązany zostanie problem nie jest ważne. Wiadomo że są łatwiejsze sposoby implementacji i bardziej zakręcone, Ważne jest natomiast aby prowadziły do rozwiązania. Wszystko przyjdzie z czasem trzeba tylko ćwiczyć. Pomogę Ci troszeczkę z tym klawiszem dalej9: CJNE A,#Dziewiec,Loop MOV A,#9 CALL Wczytaj RET Skok do procedurki 'Check' zostawia...
adres | dane| typ cyklu --------------------------- 3CBF | E3 | POBRANIE 3CC0 | 00 | POBRANIE 3CC1 | 84 | CAP 7FFF | 3C | ZAPIS 7FFE | C1 | ZAPIS CO84 | 40 | ODCZYT CO85 | 6A | ODCZYT 6A40 | ?? | W pierwszej kolumnie masz adres czyli lokalizację w pamięci. tam gdzie dane 2 kolumna masz dane lub kod rozkazu który trzeba znaleść na liście rozkazów(ważna...
Jej, ślepy jestem. Wyrzuć atrybut static z deklaracji SysTick_Handler !!! Ze static jej nazwa staje się prywatna dla modułu i niewidoczna dla linkera. Dodano po 15 Freddi: ty błądzisz :) Kompilator w obsłudze przerwania musi zapamiętać rejestry grupy saved, bo rejestry grupy temp są zapamiętywane automatycznie przez procesor. Tak samo każda inna procedura...
zerpo --> dlatego dodałem, że to nie przesada - bo każde rozwiązanie , które działa poprawnie jest ok ;) i wcale się nie kłócę które lepsze. Pewnie, że to , które podałeś spokojnie zadziała z tym wentylem. Jednak polemizowałbym ostro co do tego, że rozwiązanie podane przez ciebie zmniejsza obciążenie procesora. Być może zapominasz o tym, że każde przerwanie...
PO. : ad 1/ avr'y są ośmiobitowe, ale obsługa zmiennych 16-bitowych jest optymalna. W przypadku średnim obsługa zajmuje 2* więcej czasu: podstawienie pomiędzy rejestrami (2*mov=2 cykle lub w szczególnym przypadku movw=1 cykl), inkrementacja (subi+sbci = 2cykle, odejmowanie wartości ujemnej, gdyż nie ma dodawania o stałą podaną bezpośrednio; w przypadkach...
Ale aby przerwania działały jak należy, to trzeba by jeszcze zainicjować rejestr wskaźnika stosu...
Tłumaczą Ci ludzie już drugi dzień. Zwłaszcza kolega Logan . Czy tak trudno przeczytać w Helpie: Instrukcja ON INTERRUPT Przeznaczenie: Wykonuje skok do podprogramu gdy wystąpiło określone przerwanie. Składnia: ON źródło_przerwania nazwa_podprogramu Jeśli trudno to porzuć programowanie - są łatwiejsze profesje.
1) Po prostu zapisujesz daną pod segment stosu o przesunięciu rejestru wskaźnika stosu i przesuwasz tenże. Ściąganie w odwrotną stronę. 2) RETURN - to nie jest przypadkiem polecenie mark? Bo nie kojarzę takiego w ogóle.
Moze ktos mi dokladnie powie co robi bascom jak reaguje na przerwanie. Dokładnie to robi tak: - Bez opcji NoSave : +00000082: 920F PUSH R0 Push register on stack +00000083: 921F PUSH R1 Push register on stack +00000084: 922F PUSH R2 Push register on stack +00000085: 923F PUSH R3 Push register on stack +00000086: 924F PUSH R4 Push...
Da się wywołać procedurę obsługi przerwania poprzez skok do odpowiedniego wektora, ale w C poprawniej będzie po prostu wywołać tą funkcję. W AVR istnieją także inne możliwości - np. przerwania od pinów można generować softwarowo - jak poczytaj w nocie. Wykorzystanie atrybutu naked w procedurze obsługi przerwania właściwie implikuje użycie wstawki assemblerowej...
dziwna ta pamiec cos ale na atmelu nie mozna jej znalezc (chyba slepy jestem) porownujac do http://www.atmel.com/dyn/resources/prod_... i http://elenota.iele.polsl.gliwice.pl/d.p... to potrzebne beda jeszcze funkcje do odblokowania zapisu ( z pdf wynika ze chyba jest zablokowany po starcie ) i do sprawdzania czy...
Szukasz pojedynczych bajtów poprzez porównywanie dword'ów, w ten sposób algorytm nie ma szans nic znaleźć poprawnie. Proponuję nieco mniejszy i taki, który korzysta z odpowiednich instrukcji pętli, aby zmniejszych ilość labeli na ekranie: 00000000 <_xstrstr(at)8>: 0: 55 push ebp 1: 8b ec mov ebp,esp 3: 83 c4 f8 add esp,0xfffffff8...
W instrukcji CONFIG SERVOS jest taki parametr jak RELOAD = xxx. Liczba xxx określa jaki czas w us będzie pomiędzy kolejnymi przerwaniami licznika taktującego generator PWM dla układów serwa. I będzie to rozdzielczość tego układu. Zatem jeśli wpiszesz 10 to SERVOS(1) = 100 da nam 100x10us = 1ms impuls powtarzający się co 20ms na wyjściu podłączonym do...
Witam! Od jakiegoś czasu usiłuję napisać aplikację obsługującą kilka wątków (taki wstęp do RTOS) i przełączającą kontekst między nimi. Problem tkwi w tym, że podczas wczytywania kontekstu (LoadContext()) wywala FaultHandler. Zdebugowałem ustrojstwo i wynikiem są dwa bity CFSR: IMPRECISERR oraz STKERR. Nie wiem co może być przyczyną, być może czegoś...
rejestry atmega8 atmega128 rejestry mcp23017 rejestry
spalony sprzęt szkole moduł światła skandynawskie ariston migaj
regulator napiecia tyrystorze czytnik kindle
Skoda Octavia 2 1.6 MPI 2004 LPG/Benzyna – szarpanie, nierówne obroty, twardy pedał gazu, trudny rozruch Mercedes AIRMATIC – silnik gaśnie podczas pracy zawieszenia pneumatycznego