A zamieniłeś wszędzie , miejsca gdzie było 'dword ptr i' na 'edi', a 'dword ptr j' na 'esi' ? Poza tym, czemu wywaliłeś 'add esp, 0x0c' za wywołaniem funkcji???
"region" to obszar pamięci, dla którego możliwy jest dostęp za pomocą bit-band poprzez adresy w rejonie "alias". Innymi słowy - w "region" są zwykłe zmienne/rejestry/..., natomiast w "alias" są dostępne poszczególne bity zmiennych/rejestrów/... z "region".
16-bitowy assembler jest bardzo ograniczony, nie każdy rejestr może być wskaźnikiem danych. Zmień dx na di/si/bp/sp, albo [syntax=asm]mov di,dx mov bx, [di][/syntax]
Plik bat [syntax=dos](at)echo off for /f "tokens=3" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Wi... Shell Folders" /v "Personal"') do set zmienna=%%a echo %zmienna% pause[/syntax]
Załączyłem kawałek bazy zmiennych w Excelu, gdzie zmienna StatusF jest odczytywana fizycznie z falownika i jest słowem statusu, na poszczególnych bitach zawarte są informacje o pracy urządzenia. Pozostałe zmienne są zmiennymi nieaktywnymi (nie są wliczane do limitu zmiennych) i "rozszyfrowują" znaczenie poszczególnych bitów. Te zmienne mogą być użyte...
Pierwsza opcja to oczywiście zdefiniowanie NAPRAWDĘ DUŻEGO stosu, ale to średnie rozwiązanie jak wiadomo [; Do rozbudowanej aplikacji na ARMa myślę że należy liczyć minimum 1kB, jeśli używa się jakichś potwornych funkcji standardowych (printf!) i to głęboko to lepiej zaopatrzyć się w 2kB (o apetycie tych funkcji na pamięć pisałem ostatnio http://www.elektroda.pl/rtvforum/topic13...
hej mam taki problem a dodam jeszcze ze programuje '51 w asemblerze i teraz do setna naciskam przycisk i zwieksza mi sie zawartosc jakiegos rejestru i chce na bierzaco wyswietlac na LCD zawartosc tego rejestru np wcisna raz przycisk i na wyswietlaczu pojawi mi sie 1 wcisne np kolejne 25 razy i na LCD pojawi mi sie 26 i wlasnie w tym problem jak to najlatwiej...
Ogólnie pod windowsem... Windows blokuje przerwania, na pewno w XP i wyżej. 95,98 Me itd. pewności nie mam ale pewnie też. Bajdewej ten kod jest poprawny i pod VS działa: char c; __asm { mov AH, 0x31 mov c, AH } cout << c << endl; Wypisuje na ekranie "1", więc ok.
Tak się składa, że wiem, że R0 jest wolny a każdy inny zajęty. Dziś jest wolny, jutro jest zajęty - obyś się nie przejechał. No i coś takiego nie działa, bo zmienna StackPointer Działa - potem R4 będzie przepisane do R0 żeby prawidłowo zwrócić wynik. jest ładowana do R4, który to ma być zrzucony instrukcją STMDB Wstawki assemblerowe są dużo bardziej...
robisz to za każdym razem tak : 1. Zerujesz rejestr/zmienna w której chcesz miec wynik. 2. Przesuwasz rejestr/zmienna o 1 bit w lewo bez rotacji. 3. Jeśli P1.1 = 1 to ustawiasz najmłodszy bit w rejestrze/zmiennej, jeśli nie to zerujesz (poprostu dodajesz zawartość pinu do rejestru/zmiennej) 4. Jesli ni eodebrałes jeszcze 8 bitow to skocz do 2. Pozdrawiam...
Ja w podobnym projekcie zadeklarowałem sobie tablice wskaźników w pamięci programu. Dla zmniejszenia rozmiaru pamięci wskaźniki były typu void. I podczas odczytu zmiennych : np funkcjią 0x03 pisze sobie pętle która ma być wywoływana od adresu początku przesłanego w ramce(offset) do adresu końcowego obliczonego przez dodanie ofsetu i segmentu - oto część...
Przywroc starsza kopie rejestru i zmienne wroca: F8 przy starcie i ostatnia znana dobra konfiguracja czy jakos podobnie lub wlacz konsole i scanreg /restore A same zmienne masz w rejestrze w: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl... Manager\Environment Niestety nie mam XP wiec nie powiem Ci jakie powinny byc.
Zamiast pytać o to jak odwołać się do tego rejestru (co prawda można tworząc zmienną przez jakas_zmienna >>= 1; if(PS_WEJ&0x01) jakas_zmienna |= 0x80; nie tracąc na szybkości (3 cykle przy rejestrze IO dostępnym przez sbic/sbis, 3 przy innym rejestrze [sbrc/sbrs], 5 przy komórce pamięci). Ze względu na skrajny bit można to zoptymalizować,...
IloscRamu dd 0 . . . mov IloscRamu, eax Tak zapiszesz do zmiennej. Co do pytania o sprawdzenie ilości ramu chyba był specjalny rozkaz do odczytywania konfiguracji sprzętowej. ALe głowy nie dam. Chyba, żeby się dało jakoś odwołać do biosu. [EDIT] http://www.osdev.org/osfaq2/index.php/Ho... Tutaj jest cały...
Sama paczka nic nie da. Instalator toolchaina w wersji 3.4.2 dodaje wipsy do zmiennych rejestru i zmiennych systemowych windowsa. Robisz tak Pobierasz instalator atmel toolchaina w wersji 3.4.2. Nie mogę znaleźć na tę chwilę na stronie atmela, ale znajdziesz go np tutaj http://obrazki.elektroda.pl/1268294000_1...
Problem dotyczy WinAVR (GCC) i ATmega32. Chciałem zmusić kompilator aby zmienną 32bitową (long) umieszczał w rejestrach. Dla zmiennych 8 bitowych (char) działa coś takiego register unsigned char zmienna asm("r4"); ale jak to zrobić dla zmiennej 32 bity ( ew. dla 16 bitowej). Będę wdzięczny za pomoc.
Błędem jest to, że przesuwanie rejestrów Multiplier i wynik jest taktowane tym samym zboczem zegara co dodawanie rejestru wynik do Multiplicand. Zawartość rejestru wynik jest w tym czasie nieustalona. To że jest typem inout nie ma znaczenia, ponieważ syntezer ze składni programu i tak wie, że musi ze zmiennej Multiplier utworzyć rejestr przesuwny.
Witam, RXD jest alternatywną funkcją portu, UART lub USART - sprzętowe wsparcie dla szeregowej transmisji danych, nie korzystasz z tego przy implementacji 1wire. Możesz dowolnie zmienić pin procesora do którego będzie podłączony termometr. Pozdrawiam. GSM P.S. Kod który wkleiłeś pisał ktoś niekonsekwentny. Aby uzyskać łatwą zmianę używanego pinu, poza...
Zmienne sa zapisane w rejestrze: HKEY_CURRENT_USER\Environment... Manager\Environment Zapewne można użyć do odczytania np. http://www.pogostick.net/~pnh/ntpasswd/ ale sam nie korzystałem, więc nie wiem czy będzie działać. Zawsze możesz podmontować rejestr przy pomocy innego systemu windows i regedit.
Przecież kolega napisał. Nie resetuje się, wszystkie rejestry i zmienne są ustawione i zdefiniowane. Nie wiemy czy maja stan taki jak po inicjalizacji czy jak w trakcie pracy.
Witam, dziękuję za komentarze :D Zmienne globalne : nie najlepszy pomysł, gdyby zaczynało brakować miejsca zoptymalizował bym kod biorąc (...) Nie tylko chodzi o zajętość RAM, ale także o szybkość działania programu. Zmienna volatile będzie zawsze wykonywana tak (trzy operacje na zmiennej): - załaduj zmienną z RAM do rejestru - wykonaj operację - zapisz...
Błąd polegał na tym, że przy ISC10 zamiast przesuwania bitów było porównanie, ISC10=2 a więc relacja była spełniona i przyjmowała wartość 1. Co do wszystkich rad dotyczących kasowania i ustawiania bitów MCUCR i innych - mają one sens, ale dopiero po wstępnym wpisaniu tam jakiejś wartości. Mimo, że po resecie są tam wartości domyślne, najlepiej na samym...
Nie, jeśli przenosisz zmienną do segmentu data, to rejestr DataSegment musi wskazywać właśnie na niego. Najbezpieczniej jest użyć SEG [zmienna]
Chciałbym się tylko upewnić, czy pamięć od adresu FB00 do FBFF mogę wykorzystywać we własnych programach jako tymczasowy bufor danych ? Jest to fragment pamięci wizyjnej, nie wyświetlana na ekranie, a poprzedzająca zdublowane adresy znaków i atrybutów. W dotychczasowych programach używam tych 255 bajtów jako magazyn zmiennych odciążających rejestry...
co za bzdury zamiast porad... rejestry sterujace sa najzwyklejszymi zmiennymi siedzacymi w pamieci procka, wiec wystarczy przekazac ich adres i tyle. void funkcja(volatile uint8_t *rejestr) {...} funkcja(&PORTA); 4\/3!!
Nie wiem omen_s , czy chodzi ci dosłownie o przepisanie całego jednego do drugiego portu, czy tylko bitu pojedynczego pinu. W obu przypadkach można dokonać tego przez zwykłe przypisanie , bo jak powiedziałem predefiniowane nazwy symboliczne wszystkich rejestrów "działają" jak zmienne globalne. Można więc zrobić np: P2 = P0; //przepisanie wartości wszystkich...
Po pierwsze port powinien być wskaźnikiem na zasób sprzętowy, masz to w FAQ dokładnie opisane. Po drugie wartość zmiennych lokalnych jest tracona pomiędzy kolejnymi wywołaniami funkcji, chyba, że są to lokalne zmienne statyczne.
Jeśli chodzi o mechanizm przerwań, to wszystko masz ładnie opisane w formacie pdf na stronie Atmela . Wywoływanie przerwania w procedurze obsługi jeszcze innego to porażka. Przerwania są kolejkowane i po powrocie z jednego jest wywoływane drugie, dlatego procedury obsługi powinny być jak najkrótsze (polecam asm ;)). W procedurze timera możesz sobie...
To znany problem z tamtego okresu. Niestety nie ma prostego workaround. Najlepiej albo zaktualizować kompilator i binutils albo w kodzie nie wołać bezpośrednio funkcji oddalonych od siebie o więcej niż 4 lub 16MB(thumb2). Co więc zrobić jak wołać trzeba? Zastosować takie albo podobne makro do wołania "oddalonych" funkcji: #define x(func) \ {\ asm volatile...
Przecież masz 5 kanałów - wyjścia: OC1A, OC1B, OC2, OC3A, OC3B... Zmienne przedstawiają wartość modulacji w każdym z kanałów z osobna. Wszystkie PWMy są skonfigurowane jak 8 bitowe zatem zakres to 0..255. Ma tak być. Ponieważ nie ma aliasu (jeszcze) PWM2 dla zmiennej COMPARE2 (rejestr sprzętowy OCR2), BASCOM nie rozpoznaje nazwy PWM2. Jak zajrzysz w...
Jeżeli dobrze zrozumiałem do istniejącego już układu chcesz dodatkowo dołożyć kilka pomiarów analogowych , w takim przypadku podstawowa sprawa czy masz wolne wejścia w karcie z przetwornikami A/D o ile jest w ogóle zainstalowana , ponieważ PCD3.M5340 to tylko moduł bazowy ( jednostka centralna ) do której dokłada się odpowiednie karty rozszerzeń . Kolejna...
Skoro są programy, które to potrafią to jest to realizowalne. Trzeba poszukać programu, który to robi pod okienkami a jednocześnie ma otwarty kod. W innym przypadku będzie trzeba poszukać w rejestrze systemowym okienek zmiennych dotyczących temperatur i w ten sposób pozyskać konieczne dane. To znowu oznacza napisanie kawałka aplikacji, która będzie...
Proponuje strukture debugujaca, do ktorej wpisujesz sobie zmienne, rejestry itd. A na koniec programu, czy tez w odpowiednim momencie wysylasz zawartosc struktury na UART.
Zmienne rejestr to jest ostatnią instancja jak nic innego nie można zrobic. W ostatnim kodzie to już 3 zabrano kompilatorowi. Kolega z logo Atari lubi się jakaś gdzieś zasłyszane wiedzą popisywać.
Witam macie jakiś pomysł jak zmusić kompilator aby kompilował te instrukcje z wykorzystaniem rozkazów sbi/cbi ? Niestety rozkazy CBI i SBI działają tylko na stałych. Ja również muszę robić to na zmiennych.
Mam problem, potzrebuję zmiennej (rejestru?) o dużej pojemności, nawet 16bitów. Potrzebuję je do obliczania m.in. pierwiastków i kwadratów liczb. Jak je uzyskać w Asemblerze? piszę w AVR Studio pod AT90s2313.
Mam jeszcze pytanko czy rejestry też zabierają pamięć z tego 1kB RAMu czy mają przydzieloną osobną? Bo z tego co wiem można też tworzyć zmienne typu 'register' Tym się nie martw - rzeczywiście takie zmiene będą w rejestrach jeśli kompilator uzna to za możliwe. Ale zmienne typu register nie służą, jak już, do oszczędzania pamięci RAM ;)
BlueDraco nie mieszaj, nsvinc nie daj się wkrecać, bo nie o tym mowa. DMA obsługuje transfery 8-, 16-, 32-bitowe. HardFault tak jak pisałem generuje np. próba zapisania do adresu "tylko do odczytu". W przypadku wciągnięcia śmieci ze zmiennej albo rejestru peryferium najczęściej dostajemy adres 0x00 lub z przedziału 16b i nie ma nic do rzeczy to czy...
Zacznijmy od tego, że analizowanie tego typu przypadku jest nieco bezprzedmiotowe - jest tam dużo rzeczy zbędnych, wiele architektu nie pozwala na użycie rejestru stosu bezpośrednio - stąd add r7, sp, #0 Przeanalizujmy kod: [syntax=c]void foo(int32_t); void bar(int32_t*); int32_t __attribute__((noinline)) DSP_2(int32_t NewSample, int32_t *XCoef, int32_t...
Kompilator umieścił twoją zmienną w rejestrze bo sam to wymusiłeś dodając modyfikator static. Nie analizuj też działania kompilatora na trywialnych programach. Jak myślisz, czy twoje założenia o niemodyfikowaniu SREG, czy umieszczaniu zmiennych w rejestrach są słuszne dla nietrywialnych przykładów? Zdecydowanie nie. A zmienne możesz trzymać w rejestrach...
Jednak kod z Else wykona się szybciej, zajmie mniej cykli. Przy każdym If-ie kompilator musi umieścić zmienną do rejestru żeby ją porównać z zadaną wartością. .... Zapomniał kolega o optymalizacji interpretatora. Nie wiem jak obecnie, ale BASCOM jak się jeszcze nim interesowałem obydwie interpretował i optymalizował identycznie. Kolego sprawdź :D
Ja na twoim miejscu pomyślałbym o JTAG - jest to droższe niż programator ISP, ale daje o wiele większe możliwości na każdym etapie rozwoju wtajemniczenia. ISP umożliwia tylko zaprogramowanie układu, jak coś nie działa po twojej myśli to pozostają modlitwy, ślęczenie nad kodem i ew. niedoskonałe symulacje. JTAG umożliwia ci śledzenie programu, ustawianie...
Po pierwsze, to musiałbyś zrobić wczytywanie liczb, a nie cyfr. Czyli pętla odczytująca cyfry i wynik zapisująca do rejestru/zmiennej. Potem wyświetlanie też najlepiej oprzeć na pętli, bo powtarzanie kodu jest po prostu bez sensu. Wygodnym tutaj może być użycie funkcji ROL w celu przerzucenia 4 najstarszych bitów na najmłodsze pozycje i wymnożenie przez...
Witam, mam pytanie bardziej z tych dydaktycznych. Analizując kody źródłowe dla mikrokontrolerów (bez RTOS/RTE) spotykam się z cyklicznym zapisywaniem wartości do rejestrów mikrokontrolera - co obieg głównej pętli programu. Chodzi mi o przypadek gdzie nie spodziewamy się zmiany wartości danego rejestru w innym miejscu podczas wykonywania programu (przerwania....
To nie o to chodzi. Na początku programu: - w pierwszej linii kodu zapamiętaj wartość tego rejestru w jakiejś zmiennej, - i wyzeruj ten rejestr. Teraz w zmiennej masz stan bitów tego rejestru i możesz sprawdzić, który reset wystąpił - patrz bity tego rejestru. W ten sposób będziesz wiedział co jest przyczyną resetu - o ile nadal uważasz, że faktycznie...
mam pytanie od nośnie macra, ponieważ to mi działa: delay1 0x05, 0x05, 0x05 a to nie działa delay1 R16, R17, R18, R19 ktoś mi wytłumacz czemu nie działa jak podaje jako zmienne rejestry, albo jak trzeba zrobić żeby działało
Czyli to, że na Arduino z ATmega328 nie ma interfejsu debugowania, to "zwykła plotka"? No ciekawe... Podłączasz Nano do PC przez USB i debugujesz z zaglądaniem do zmiennych i rejestrów?
Jak myślisz, która linia kodu odpowiada za wysłanie zmiennej leds do rejestru? Czy wysyłasz tę zmienną po każdej zmianie jej wartości?
Czemu po prostu nie przestawisz wartości ARR zamiast jednego z rejestrów od porównania?
a dlaczegio chcesz mieć je zapisane w postaci bitów zawsze możesz sobie odczytać dowolny bit rejestru bądź zmiennej i oczywiście dokonywac rotacji tych zmiennych i rejestrów
A dlaczego kolega ma ustawiony bit ADLAR w ADMUX ( ADMUX = 0b00100000; )? Przecież to włączenie wyrównania do lewej w rejestrze ADC, więc trzeba to chyba później uwzględnić w obliczeniach. Chciałbym jeszcze zauważyć, że sprintf() operuje na zmiennej czterobajtowej, która w każdej chwili może zostać zmieniona przez przerwanie od ADC przykładowo w czasie...
Zmienna nadal może nie być zapisywana - dopóki w toku wykonywania nie będzie wywoływanej funkcji, która mogła by korzystać z tej zmiennej, nie zabraknie rejestrów pod zmienne, dopóty wartość będzie trzymana w rejestrze. Oznaczenie zmiennej jako volatile wyłącza ten mechanizm "cacheowania" wartości zmiennych w rejestrach. Dla przykładu rejestry IO są...
Nie masz racji i było to już wyjaśnione. Procedura obsługi przerwania może zmodyfikować zmienną w rejestrze bez wiedzy wątku.
Dzięki ale nie chodziło mi o kod w konkretnym języku, tylko o schemat postępowania, algorytm konwersji, mam zamiar zapisać sobie każdą cyfre BCD w odzdzielnej zmiennej (rejestrze) a programik pisze sobie w asemblerze na AVR, ale z programem sobie poradze tylko chodzi mi o sam sposób przeprowadzenia takiej konwersji.
Nie można. Pole unii rejestr zawiera wszystkie 16 bitów widziane jako jedna zmienna 16-bitowa. Pole bit udostępnia je jako 16 indywidualnych zmiennych 1-bitowych b0, b1 itd.
A od kiedy w c mamy taki dostęp do bitów w zmiennych i rejestrach?
No właśnie - w końcu dla nieznanego mechanizmu modyfikującego zmienne nieznany rejestr procesora nie jest ani trochę bardziej nieznany niż nieznana lokacja na stosie. :)
Przepraszam że zadam takie głupie pytanie: do czego to służy ? bo z tego co napisałeś to nie rozumiem? Do debugowania programu na mikrokontrolerze, dzieki JTAGowi możesz sobie wstrzymać program w dowolnym momencie i sprawdzić stan dowolnej zmiennej, rejestru czy czego tam bedziesz potrzebował- to tak baaaaaardzo ogólnie, resztę podpowie Ci google.
Odczytu wartości zmiennych lub rejestrów można dokonać po zatrzymaniu programu lub w trybie krokowym i SWV nie jest do tego potrzebne.
Ilość wejść i wyjść można "ogarnąć" przez "zakodowanie" stanu do rejestru. Jedna wartość rejestru pozwala na opanowanie 16 zmiennych bitowych. Dla przykładu: w R0 jest wartość stanu 16 bitów (WM0 - > M0-M15); (WM0 można też załadować ze stanu fizycznego markerów M0 - M15); następnie funkcja 40.BITRD dekoduje na daną zmienną (Y0-Y16). Te `70 wyjść na...
No i to sie zgadza - wersja 6.7 wyszla ok. 20 miesiecy temu ;). Aktualizuj, albo wylacz powiadomienie :) Ileż jeszcze razy można pisac to samo kazdemu - Windows CE zostal celowo tak zaprojektowany, by nie zapamietywal zmiennych - rejestru, daty, pulpitu i podobnych!! Wlasnie CELOWO, by przekraczajac dziennie trzy strefy czasowe nie musiec wciaz przestawiac...
Takie zjawisko masz, jak stos ci wchodzi na zmienne. Rejestry odkładają się na stosie, jak wywołujesz zagnieżdżone funkcje. Stos przyrasta z przeciwnej strony RAMu, niż zmienne. Jak masz 70% pamięci danych zajęte, to jest to na 99.99% tego skutek. Rozwiązanie jest takie, żeby zmniejszyć liczbę zagnieżdżeń, ew. rozwinąć USART_Transmit wewnątrz USART_Transmit_Word....
#lit1 jest z tego co pamietam oznaczeniem numeru bitu, czyli cyfra od 0 do 15. takie operacje realizowane sa na normalnych zmiennych/rejestrach o wiekszym rozmiarze. warto chyba jeszcze dodac, ze powyzsza deklaracja stworzy ci zmienna STATYCZNA, to znaczy bedzie ona zajmowac miejsce w pamieci przez caly czas. zmienne lokalne dla dsPIC sa tworzone albo...
Czy po USB można zajrzeć do wnętrza plytki podczas wykonywania programu? Tak - można. Można zobaczyć zmienne programu, rejestry, wykonywać linia po linii albo do określonego miejsca itd itd Dodano po 2 SNAP to dla mnie kondensator ze znitowanymi zaciskami. Jak (at)kamyczek napisał : https://www.google.com/search?q=snap+deb... albo https://www.google.com/search?q=snap+mic...
Możesz sie dostać do bitu przeniesiena z poziomu C stosując predefiniowaną zmienną PSW. 7 bit w tym rejestrze to wlaśnie bit CY, więc możesz zrobić tak: long al,ah,bl,bh; al+=bl; if (PSW&0x80) ah++; ah+=bh; W ten sposób do zmiennej a (rozbitej na ah i al) dodałeś zmienną b.
Nie wystarczy zmienić wartość zmiennej "pwm". Musisz przede wszystkim zmienić zawartość rejestru OCRxx aby zmienił Ci się współczynnik wypełnienia: [syntax=c] if(pwm<1000) { _delay_ms(100); pwm++; OCR1A = pwm; //<==== }[/syntax]
Przerobiłaś mój kod ale nieco nieprawidłowo. Zerujesz licznik pominietych sampli tylko w przypadku gdy przechodzisz do zerowego kanału. A trzeba przy kazdej zmianie kanału. Nawet jezeli nie pomijasz pomiar to musisz odczytać rejestr ADCH. (nawet do tymczasowej zmiennej typu register).
(at)A.T. To jak przekazuje sę argumenty znajdziesz w opisie ABI kompilatora. Ma to znaczenie tylko jeśli całą funkcję C napiszesz w asemblerze - to znaczy umieścisz ją w odpowiednim pliku .S i wyeksportujesz za pomocą .global. Natomiast jeśli definiujesz funkcję w C i w jej ciele umieścisz wstawkę to odwołujesz się nie poprzez rejestry lecz nazwy zmiennych/argumentów....
Program się zresetuje:> O to chyba chodziło nie;) Z tego co ja zrozumiałem to autorowi chyba chodzi o reset w którym to program wróci na początek, zmienne przyjmą wartości początkowe itp, czyli całkowite zresetowanie uC, a twój sposób chyba gwarantuje tylko powrót programu na początek, bez resetu zmiennych, rejestrów etc.- czyż nie? EDIT: no i atom...
Zmienną 'flaga' ustalasz w przerwaniu wiec powinna być volatile. p.s. Samych rejestrów nie sprawdzalem.
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
Podglądnij w pliku m.prn jaki masz ostatnią skompilowaną linijkę i jaki jest adres. Może przekroczyłeś 4kB. Czy masz w kodzie źródłowym zdefiniowane segmenty CODE i DATA (dyrektywa SEG)? Sprawdź co jest w linii 1469 kodu, wygląda to na komunikat w przypadku gdy np chcesz do zmiennej/rejestru 8 bitowego załadować wartość 16 bitową, lub gdy skok względny...
Skąd wiedzałeś żeby użyć akurat rejest 3 i 4 ? register uint8_t pwm_val asm("r2"); register uint8_t pwm_mask asm("r3"); Stąd że r0 i r1 były już wykorzystane i poprostu wykorzytałeś 2 kolejne/wolne ? I czy moge wykorzystywać to ot tak w innych programach gdzie liczy się czas instrukcji. http://www.nongnu.org/avr-libc/user-manu...
to co pisałem wyżej już nie ważne mam taki skrypt chodzi o to żeby wartość ze zmiennej "temp" zastąpiła tą wartość rejestru "{9E370914-E7F5-4DAE-A3FC-A153ADB9CA53}" żeby było to z automatu nie ręcznie Dodano po 37 czy tak będzie dobrze? [syntax=vbscript]Option Explicit On Error Resume Next Dim objShell, Temp Temp = ReadReg("HKEY_LOCAL_MACHINE\SOFTWARE\ESE...
Ten kod jest niejasny. Mylisz pojęcia skoroszyt (Workbook) i arkusz (Worksheet). Skoroszyt może zawierać kilka arkuszy. Taki fragment jest błędny. [syntax=vbscript]Dim Formualarz As String Dim Rejestr As String ThisWorkbook.ActiveSheet = Formularz Workbooks.Open Rejestr Workbooks(Formularz).Activate Workbooks(Rejestr).Activate [/syntax]Co dokładnie...
Zastanawiam się, ile jeszcze elementów trzeba dodać, żeby zniwelować błędny algorytm. Cały problem leży w oprogramowaniu, a jedyne potrzebne elementy - to dwa zwnętrzne rezystory podciągające (wyłącznie z powodu możliwych zakłóceń impulsowych). Obsługa w przerwaniu timera, zmienne - rejestry historii obu wejść, programowe usuwanie pojedynczych nietypowych...
ADC uruchom w trybie Free Run, bez zgłaszania przerwania po zakończonej konwersji. Przetwornik uruchom w miarę szybko, najlepiej blisko wielokrotności częstotliwości zgłaszania przerwania przez Timer. I wtedy w Przerwaniu od Timera przepisujesz wartość z rejestru ADC do jakiejś zmiennej/bufora.
W Twoim działającym przykładzie do rejestru wpisujesz adres tablicy ("&" może być albo może go też nie być - również zadziała wg mnie), natomiast w przykładzie niedziałającym najpierw do funkcji podajesz adres tej tablicy, a potem jeszcze raz wyciągasz adres tego adresu - żeby zaspokoić Twoje potrzeby kompilator zmienną tab umieszcza gdzieś na stosie...
NIe możesz tak manewrować ciągle rejestrem UDR. Skopij UDR w przerwaniu raz do jakiejś zmiennej , a potem używaj już tylko tej zmiennej.
"Tą" liczbę masz zapisaną w zmiennej Liczba_przerwan_tim0 a nie w ośmiobitowym (czego się chyba obawiałeś) rejestrze timera0 - więc nie ma problemu.
janbernat : ale jaki jest problem z volatile ? register to jest raczej sugestia dla kompilatora. Niemożliwe jest obligatoryjne trzymanie zmiennej w rejestrze. Dlaczego najgorzej jest z interrupt ? Naczytał się kolega stek bzdur i teraz zdaje się mieć wątpliwości co do sensu programowania w C. Zapewniam, że nie jest tak źle. Co do kolejki/buforu cyklicznego/innych...
W ten sposób wiążesz zmienną z rejestrem. W tym przypadku każde odwołanie do counter będzie wiązało się z operacją na R3. Przyporządkowanie jest globalne, nie da się go ograniczyć do funkcji. Zresztą nie miałoby to sensu.
Warto jeszcze w takim razie robić następujące rzeczy: 1. po wejściu do przerwania wyłączać zezwolenie na przerwania 2. przed wyjściem z przerwania włączać zezwolenie na przerwania 3. zmienne globale inicjalizować wartością w kodzie 4. ręcznie zachowywać rejestry przy wejściu do funkcji 5. ręcznie przywracać rejestry przed wyjściem z funkcji 6. wszystkie...
W kodzie powinny zostać użyte 0xFF926D (zapis szesnastkowy) zamiast FF926D itd. - to drugie jest traktowane jako nazwa zmiennej, stąd błąd o braku jej deklaracji.
Witam, przewertowałem już kilka tematów i specyfikację avr-gcc ale nie znalazłem odpowiedzi na moje pytanie. Mianowice czy da się w jakiś sposób zrobić aby zmienna (nie wskaźnik) w strukturze [syntax=c] struct _A { volatile unsigned char pa; }; [/syntax] odpowiadała adresowi np. 0x1B (PORTA w Atmega32). Wiem że taki efekt można uzyskać za pomocą wskaźników...
Witam. Timer mikrokontrolera '51 taktowanego zegarem 11.059200 MHz zliczy w ciągu jednej sekundy 921600 impulsów. Ze względu na wielkość timera (2 bajty) może Kolega zliczać setne części sekundy - ustawić przerwanie co 9216 impulsów. Każde wywołanie przerwania zwiększy zmienną o 1, czyli mamy w niej wynik pomiaru z rozdzielczością 0,01 s. Rozwiązanie...
Nie, musisz scalić (skleić bajty) w jeden rejestr 4-bajtowy typu float. Czyli tworzysz zmienną FLOAT albo REAL i w tej zmiennej trzeba "upchnąć" Twoje dane. Tyle tylko, że zadanie może to być karkołomne :-). Jaka SCADA i jaki driver (MODBUS'a)?
... Error : 46 Line : 10 Assignment error [COMPARE1A: 0 12: 112] , in File : C:\PROGRAM FILES\BASCOM-AVR-1-11-9-1 FULL\PILOT-TINY26-SONY.BAS ten błąd mam tylko przy tiny26 przy innych prockach np. mega 8 lub tiny 2313 program ładnie się kompiluje . o co chodzi przecież tiny26 ma OC1A ? Spawa jest śmiesznie prosta , jeśli...
Tak, jak w załączonym wycinku z instrukcji, dodając (at) przed nazwą zmiennej. RX to PACSystem CPU i też obsługuje adresowanie pośrednie.
właśnie że dobrze dobrze :wink: Trochę tak a trochę nie. Nie tylko w przerwaniach ale również w innych jak wspomniałeś "jednocześnie występujących" funkcjach. Poza tym można również przypisać zmienną do rejestru. Czasami też wystarczy zadeklarować zmienną globalną o ile nie jest ona używana w przerwaniach.
Rozwiązanie z postu powyżej jest najlepszym według mnie: if(v) PORTB |= (1<<PB3); else PORTB &=~(1<<PB3); Żeby jednak traktować pojedynczy bit portu jako osobną zmienną można wykorzystać fakt, że rejestry io posiadają swój adres w przestrzeni danych, przez co można uzyskać adres i rzutować wskaźnik na jakąś bardziej...
Jeszcze jedna prośba. Jak na razie nie wykorzystywałem nóżek procka do odczytywania klawiszy. A przy zegarku czasem trzeba zmienić ustawienia. I teraz kombinuję z algorytmem odczytywania klawisza/przycisku w taki sposób jak np. klawiatura komputera. Czyli po naciśnięciu następuje zwiększenie/zmniejszenie jakiejś zmiennej (rejestru) o 1, a po chwili...
Mam wrażenie, że to jest ukierunkowane na użycie gdb do programu skompilowanego do debugowania. Ale ja potrzebuję poleceń, które pozwolą mi debugować program skompilowany normalnie, i tam takich nie zauważyłem. Ja nie mam zmiennych, mam adresy w pamięci i rejestry, i muszę dochodzić, jak to przełożyć na zmienne, rozpoznawać struktury danych w pamięci...
Pewnie ale trzeba najpierw wprowadzić zmienne w panelu, a kolega musi najpierw rozróżnić czy adres jest do odczytu czy zapisu jak go się definiuje. Nadać etykiety, komentarze zmiennych, odróżnić bit, rejestr, index, umieć przeczytać zmienne typu heartbeat, integer i td. Dobrym testem jest: Ustaw obiekt numeryczny o adresie LW 9019 rejestr 16 bit godzina...
PTR to nie jest rzutowanie, jakie występuje w językach wysokiego poziomu, tylko traktowanie. Po prostu jest spod adresu wskazanego zmienną pobierane WORD danych. Jako, że sama zmienna jest tylko typu bajt, to w rzeczywistości zostaną pobrane wartości ze zmiennej Byte1 i Byte2 w kolejności.
Problem leży tu: SIGNAL(USART_RXC_vect) { if(UDR=='$') zapis=1; if((i<14)&&(z... { buf[i]=UDR; i++; } if(i>=14) { k=1; zapis=0; i=0; } } Otóż odczyt z rejestru UDR powoduje jego wyzerowanie a następnie załadowanie następnego odebranego znaku (jeżeli...
Atollic Lite faktycznie ma troche wad np nie mozna pisac w C++, podgladu rejestrow nie ma ale zawsze mozna to ominac w taki sposob ze sobie dane z rejestru do zmiennej przypisujesz i w zakladce veriables masz to do podgladu, a reklamy wcale nie wyskakuja czesto, mi sie zdarza raz na 1h moze nawet rzadziej, CooCox faktycznie chyba lepsza opcja, najlepsza...
Nie zepsułes. Polecam raczej podejscie - z doły do góry: Eliminuj problemy od najprostszych a potem przechodz do bardziej zlożonych. Masz wyswietlacz - momzesz debugowac do woli (wyświetlać zmienne, warości rejestrów itp.
1. Zapisuj kod w znacznikach MOV AL,BX[SI] CMP AL,BX[DI] JG etykieta
Sterowniki GE Fanuc rodzin VersaMax mają wbudowany superkondensator. Nawet jeśli zewnętrzna bateria jest wyczerpana, to przez pewien czas pamięć RAM jest podtrzymywana tym superkondesatorem. Dzięki temu nawet przy braku baterii sterownik nie traci wartości zmiennych (rejestrów). Natomiast zarówno superkondesator jak i bateria (jeżeli jest zainstalowana...
wyświetlić zmienną string zmienną zmienną adres
spawanie ciągłe spawarka normy suzuki wagon
telewizor elektron telewizor elektron
Resetowanie kotła Saunier Duval Combitek F 24 Briggs & Stratton 15,5HP odpala, ale nie jedzie