Tak to jest z darmowymi narzędziami. W Twoim przykładzie mov pobierał wartość globalnej zmiennej zamiast tej ze stosu. void outport(int port,int dane) { asm(".intel_syntax noprefix"); asm("mov dx, [ebp+8]"); asm("mov al, [ebp+12]"); asm("out dx, al");...
oczywiście, że wystarczy $asm ... kod twojej wstawki $end asm ale oczywiście przydałoby się jeszcze wiedzieć jak można uzyskiwać w asemblerze dostęp do zmiennych itp, otóż: Dim Zmienna1 as Byte $asm lds R16, {Zmienna1} ... coś tam robimy sobie w asm ze zmienną i chcemy ją uaktualnić, więc: sts {Zmienna1}, R16 $end asm powyżej...
Witam, Potrzebuję skorzystać we wstawce asemblerowej ze zmiennej zadeklarowanej w C, a dokładnie zapisać w zmiennej widocznej z poziomu C wartość z rejestru. Próbowałem napisać następujący kod //... uint8_t i; //... asm volatile ("sts %0,r20"::"m" (&i):"r20"); //... ale coś tu jest nie tak. Proszę o sugestię i kontakt osób, które maja doświadczenie...
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ć,...
Dokładnie tak jak napisał przedmówca. Najpierw trzeba dołączyć plik zawierający zmienne, a dopiero potem można je używać. Daj osobne wstawki php; include config.php na samym początku pliku html. A potem już w dowolnym miejscu możesz używać zmiennych które są tam zapisane. komenda Echo może wyświetlić każdą, wcześniej zadeklarowaną zmienną, lub zwyczajny...
Jeśli zmienna nie jest oznaczona jako "volatile", to kompilator jeśli zdecyduje, że zmienna na nic nie wpływa, może ją zoptymalizować (czytaj: usunąć). Kompilator nie sprawdza, czy zmienna jest używana w przerwaniach, gdyż dla niego są to osobne funkcje, które muszą być wywoływane (a te nie są w twojej funkcji wywoływane). Masz dwa rozwiązania: zmienną...
Witam, zrobiłem wstawkę ASM w kodzie C. Zapisuje w niej sporo danych do pamięci(od adresu 0x0000). W jaki sposób zadeklarować zmienną w C, aby dane z wstawki można było odczytać odwołując się do zmiennej w kodzie C?
Witam ! Posiadam tą książkę, lecz ja tego typu książki traktuje jak encyklopedie, nie czytam ich od dechy do dechy ale przeglądam interesujące mnie fragmenty i zagadnienie. Na szczęście w książce tej nie ma przepisanej dokumentacji od AVR, co jest, z tego co zauważyłem, podstawą pisania obecnych książek o programowaniu uC i to niezależnie od wybranego...
Witam Ja bym ci radził napisanie wstawki asemblerowej. Odczytasz adres zmiennej float i od tego adresu bedziesz odczytywał bity.
Witam. Chciałbym się dowiedzieć jak przekazać wartość rejestru do zmiennej w C. Zakładam użycie wstawki asemblerowej. Chcę stworzyć prymitywną wersję funkcji scanf i chcę przypisać zmiennej kod klawisza który został wciśnięty(czyli rejestr AL(używam funkcji 00h przerwania 16h)). Liczę na szybką pomoc. Pozdrawiam
Witam, Mam problem z zapisywaniem zmiennych w tablicy we wstawce asemblerowej. Próbowałem już różnych sposobów, aby "przemycić" adres początku tablicy do wstawki, ale bezskutecznie:( Jakiego operandu mam użyć, a może jest inny sposób? W asm mam pętle, w której dane są zapisywane poleceniem st Y+, Rx. Czyli potrzebuję zapisać do rejestrów R28,R29 adres...
Witam! Używam demo programu Bascom 2.0.10.0 na 8051 i w nim mogę używać config i2cdelay kilka razy w programie i parametrem może być zmienna, co w Twoim przypadku ułatwia sprawę. Nie stosowałem tego nigdzie, ale przed chwilą sprawdziłem i przy kompilacji nie ma żadnych błędów, więc powinno działać. Co do zmiennej to na pewno można użyć zmiennej z Bascoma...
A nie wygodniej użyć wstawki asemblerowej i wykonać polecenie ROL (czy któreś z tej grupy)? Możesz tak rotować zmienne 1, 2 i 4 bajtowe i to jednym poleceniem procesora! (zapisanie tego w języku wysokiego poziomu wymaga minimum 3 poleceń). (coś na kształt taki... z góry uprzedzam, że nie pamiętam, jak się asm wpisywało w C) [syntax=C]function rotation(uint16_t...
...więc się zgadza wszystko... Wprost przeciwnie - nic się nie zgadza :!: K ma być 8 bitowa wartością wpisana do rejestrów 16-31 :) No właśnie , a Ty jako argument K , podajesz time , który to jest adresem(wskaźnikiem) do komórki pamięci RAM i na dokładkę , ten adres w procesie kompilacji nie jest znany , bo time jest zmienną lokalną. Argument K ,...
BASCOM może mieć problemy z odjęciem od liczby 65536 zmiennej Word lub Integer. To po pierwsze. Więc zastosuj zmienne typu Long. W dodatku stosując offset (wartość odniesienia) nawet zoptymalizowanie programu nie pozwoli zastosować zmiennych dwubajtowych, bo niektóre wyniki będą miały wartości większe od 65535 (lub inaczej: dodatnie wartości mogą wyskoczyć...
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...
Jest problem.. Pozbylem sie wstawek asemblerowych i korzystam tylko ze zmiennych deklarowanych poleceniem DIM i nadal jest to samo.
Qrcze, użyj rejestru R0..R7 albo zmiennej. Napisałem przecież wyżej...
Witam! Zaczynam naukę pisania w C na 8051 do tej pory pisałem tylko w asemblerze. Używam kompilatora raisonance. Mam pytanie jak traktowane będa zmienne typu unsigned int (ktore sa 16 bitowe) we wstawkach asemblerowych gdy ten procesor jest 8 bitowy. Dziękuje i pozdrawiam
Sprawa bierze się stąd, że adresy rejestrów są znane kompilatorowi, a adresy zmiennym przydzielane są dopiero na etapie linkowania. Stąd kompilator nie może optymalizować kodu. Można definiować zmienne globalne jak rejestry, lub zastosować wstawki assemblerowe. Albert
Stosując wstawki w asm można to zrobić w 8 krokach z wykorzystaniem 2 poleceń ROR i ROL (przesunięcie w prawo i przesunięcie w lewo z wykorzystaniem flagi 'C'). Najpierw zmienną źródłową przesuwamy w prawo (ROR) bit najmniej znaczący ląduje w 'C' następnie zmienną docelową przesuwamy w lewo - na najmniej znaczący bit wpada to co jest w 'C' i tak osiem...
Niestety w języku LAD nie ma adresowania pośredniego. Do tego trzeba skorzystać z języka STL, który ma o wiele więcej funkcji niż LAD czy FBD. I tutaj koniec. Jednak można kombinować tak, jak wyżej i z dostępnych funkcji tworzyć adresowanie nazwijmy je "pseudopośrednie". Ale takie drabinki szybko robią się bardzo duże :), szybkość wykonywania programu...
(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....
Instrukcja w tej formie __asm { MOV R1,R3 } jest malo uzyteczna bo tak naprawde nie wiesz co jest w R3 w momencie przeniesienia jej do R1(na co rowniez wskazuje blad kompilatora). Załaduj na poczatku do R3 jakas wartość albo zawartośc jakiejs zmiennej i blad zniknie. Co innego gdybys mial funkcje,ktora pobiera kilka argumentow wtedy w R3 mialbys wartosc...
Czy to w ogóle działa? Ja użyłbym tu z 10 nawiasów aby nie pomylić priorytetów operatorów i do tego było by to bardziej przejrzyste. Jak za miesiąc sięgniesz do tego kodu to spędzisz ze 2h odszyfrowując co miałeś na myśli. Staraj się nie używać pojedynczych literek jako nazw zmiennych, używaj nazw opisowych. Możesz spróbować wyliczyć poszczególne części...
122 linie? Niemożliwe. Zmień rd na char lub uint8_t, zapewne masz go też volatile, lokalnie ściągnij ten atrybut przypisując rd do innej zmiennej. Masz też włączoną optymalizację (-Os)?
Gotowe np regulator PID nie będzie pasował do moich potrzeb. Więc zostają wstawki. Chyba, że w Keilu można operować na 64b zmiennych ale takiej opcji nie widziałem w dokumentacji.
Nie wydaje mi się aby przez zmianę tylko obsługi przycisku wyciągnąć coś więcej zważywszy, że if/wait są bardzo dobrze zoptymalizowane przez kompilator, więc raczej szukaj gdzieś indziej.. (np. pozbądź się nietypowych zmiennych typu single itp...)
Kilka błędów: - nie możesz zakładać, że zmienne znajdują się pod stałymi adresami w pamięci, to się będzie zmieniać pomiędzy kompilacjami, w związku z tym istnieje konieczność użycia symboli - register to tylko sugestia dla kompilatora i tych rejestrów wcale nie musi rezerwować. Ale jest też poważniejszy błąd - rejestry te są wykorzystywane przez AVR-libc...
Jeśli zmiennych jest niedużo najlepiej przy każdej zrobić wstawkę a treść strony napisać html ewentualnie html+css. Innym wyjściem jest zrobienie wszystkiego w PHP. Po prostu wyświetlasz zmienne oraz fragmenty kodu strony jako string. [syntax=php] echo '<div class="aut">'; echo $row['autor']; echo '</div>'; [/syntax] Tu akurat wyświetlam...
Dr.Vee : Autor wyraźnie napisał, choć nie do końca powiedział: (na portA wchodzą sygnały clock, strobe i date) Osobiście rozwiązał bym to przez sprzętowe spi, wstawką asemblera lub za pomocą jednej, większej zmiennej. Globalne zmienne są dopuszczalne, jednak ograniczenie zakresu zmiennych jest wskazane.
Próbuję napisać wstawkę assmblerową, która zastąpi kod C: [syntax=c] // Software SPI for chips that do not support Hardware SPI i.e Tiny Chips or if we have to assign other pins for SPI void Spi_8_bittransfer(unsigned char data) { for (unsigned char u = 7; u < 8; --u ){ LCD_CLK(0); LCD_DATA((data) & (1 << u)); LCD_CLK(1); LCD_CLK(0); }...
ja bym to zrobil we wstawce assemblerowej ale w kazdym razie chodzi o przewijanie rejestru/zmiennej i kopiowanie jednego bitu(wskaznika c) na wyjscie lub na odwrot zczytywanie z zewn do c/bitu zmiennej i dopiero przewijanie
(at)WX3V To co napisałeś to jakiś zbiór życzeń i dziwnych przemyśleń. Albo dopiero zacząłeś programować, albo do tej pory pisałeś programy w asemblerze. Nie ma nic takiego jaki zachowanie kolejności zmiennych, sortowanie po typie czy innym kryterium. Zagnieżdżenie wstawki asm w funkcji obsługi przerwania jest możliwe i nie ma tutaj wątpliwości. Ale...
...Ma ktoś jakiś pomysł na umieszczenie tabeli danych jako wstawka asm w C ? Pzdr. Można to oczywiście zrobić , tylko pytanie po co :?: Czyż nie prościej "usadowić" dane w pamięci programu , z poziomu C :?: Poza tym , kompilator "wyrzuca" wszystkie .ORG , bo to on zarządza co i gdzie umieścić we flash-u.Jedynie pozycję zmiennych (w pamięci danych)...
Należy zrezygnować z Bascoma albo zrobić wstawkę w assemblerze, a wynik umieścić w tablicy lub dwóch zmiennych. Niestety Bascom nie potrafi operować na liczbach 64-bitowych.
Czy ten temat przypadkiem nie powtarza sie nty raz? Poza tym nie jest to program asemblerowy, lecz wstawka, a to trochę zmienia sytuację. Brak jest deklaracji zmiennych i innych potrzebnych danych. Napisz ten program cały w asm, to Ci pomogę.
- Czy nie dałoby się jeszcze jakiejś parki rejestrów zarezerwować na movw rX+1:rX, r25:r24 ? Byłoby jeszcze szybciej... Przecież chciałeś to mieć w rejestrach? Ale jeśli nie to żaden problem, tyle, że będzie bez movw, bo nie ma z czego przesyłać. Pozostaje tylko zdjąć volatile na czas operacji na zmiennej w przerwaniu... Chciałem użyć tej pary rejestrów...
"r" od "=r" różni się tym, że "r" jest stosowane przy wejściu (po drugim dwukropku), a "=r" przy wyjściu (po pierwszym dwukropku). Zmienne tymczasowe dawałem jako wyjściowe ze wstawek aby kompilator nie czepiał się do niezainicjalizowania zmiennej. Jeśli chcesz mieć zmienny adres, to nie możesz korzystać z sts, które zapisuje pod stały adres. Jeśli...
hmmmm... a nie lepiej byłoby napisać program w C/C++ z wykorzystaniem wstawek asemblerowych? Przedstaw dokładniej problem i zamieść program, aby lepiej można było Ci pomóc :)
Witam, Borykam się z zamieszczeniem pewnych wartości pod konkretny wskazany adres i to bez znaczenia czy ma to być xdata, data czy code. Dla środowisk RC-51 istnieje swobodne umieszczanie zmiennych lub stałych w pamieci, oto przykład: at 0x20 data char zmienna1; //umieszcza w pamięci RAM pod adresem 0x20 zmienną Niestety ta dyrektywa nie jest rozpoznawalna...
Nie zapominajmy o opisywaniu zmiennych, bloków, networków. Kiedyś kochałem stl, P#, zabawy RLO dziś po 10 latach "boje się" zaglądać do swoich wstawek :)
Dzięki. Mam kolejny problem. Spotkałeś się może z tym, że wyświetla w bascomie błąd w konkretnej linii, a jak się tam przechodzi to linia jest pusta? "Source variable does not match the target variable" i rzeczywiście, mam takie wstawki w których zmienna word ma się równać zmiennym byte + byte, ale to wszystko liczby, można tak robić. edit: okazało...
Jeśli ten toolchain używa GCC (nie wiem jakie znaczenie ma czy to jest Eclipse czy cokolwiek innego...), to w dokumentacji tegoż GCC jest cały rozdział poświęcony współdziałaniu asm i wyższego poziomu oraz wstawkom assemblerowym. Niemniej jednak skoro w ogóle nie wiesz jak to zrobić, to śmiem przypuszczać, że te wstawki nie będą miały żadnego sensu...
Dziekuje Wam za pomoc. jednak to o czym piszecie juz robilem. czyli zapisywalem sreg zarowno na stos jak i w zmiennej w pamieci bez widocznej poprawy. Zapisywalem rowniez wszystkie rejestry uzywane (pozniej nawet wszystkie rejestry procesora) bez rezultatu. Moze problem jest w tym ze nie wiem dokladnie co robi bascom jak reaguje na przerwanie? moze...
Keil jest nowy chyba 7.0. A moglbys podac jakis konkretny przyklad powedzmy: w asmemblerze nadawane jest wartosc jakiejs zmiennej i poprzez te parametry o ktorych pisales jest prekazywany do C.
Poczytaj w pomocy o instrukcjach: DATA , RESTORE, READ. Kiedyś robiąc skomplikowane menu używałem tego do przechowywania stałych tekstów/opisów. Wszystkie były tej samej długości. Aby nie używać SELECT CASE zrobiłem wstawkę asemblerową. O ile dobrze pamiętam rejestry R8 i R9 są używane jako wskaźnik dla funkcji READ. Możesz też wszystkie swoje dane...
A nie lepiej do sterowania portem LPT użyć wstawki assemblerowej ? lub zlportio ? Prosta instrukcja mov na adres $378
ma to byc wstawka asemblera wystawiajaca na port LPT zmienna, wstawilem kod: __asm__( "movb $0x0d, %dl\n\t" "movb $0xdd, %al\n\t" "out %al, %dx\n\t"); i nie ma zadnego problemu, problem sie zaczyna gdy zamiast stalych wartosci (np 0x0d) chce uzyc zmiennej:/ wtedy otrzymuje znow komunikat : "Cannot represent relocation type BFD_RELOC_8"
No ok rozumiem pomysł, powinno zadziałać samo przesuwanie. Wystarczy 7 bajtów (7x8=56) Jak zapewnić sobie w Bascomie te 7 rejestrów na wyłączność? Tzn jak sprawić żeby we wstawce asm. nie skasować czasem jakiejś bascomowej zmiennej? A jeśli sie nie da w rejestrach, to do których komórek pamięci zapisywać skladowe bajty rejestru żeby nie nadpisać jakiejś...
Łańcuch z diod LED. Może podpowiecie, jak napisać taką wstawkę w asemblerze do przerwania od Timera. Zmienna globalna pwm jest porównywana ze zmienną licznik (zwiększana w przerwaniu). Jeżeli większa, to LATX HI else LATX LO. Zmienna globalna będzie normalnie widziana w stawce asemblerowej?
(...) bić, żeby poinformować kompilator, że ma optymalizować kod w C, ale nie pomijać tej wstawki asm(...)? Próbowałem asm volatile (...), nie pomaga. (at)ElektrodaBot jaka dyrektywa działająca tylko na wstawkę asm() w programie w C kompilowanym przy użyciu GCC ochroni ją przed wyrzuceniem przez optymalizację? Bezpośrednia odpowiedź na pytanie Aby...
Witam. Dla ćwiczebności napisałem sobie funkcję zwracającą ilość cykli zegara w celu pomiaru długości wykonywania funkcji itp. Aby to osiągnąć odczytuję "PENDSTSET" oraz stan licznika SysTick. Jednak pomiędzy tymi dwoma odczytami upływa trochę czasu i wartość licznika jestem w stanie skorygować znając czas jaki upłynął miedzy tymi dwoma instrukcjami...
Witam Czy przypadkiem w Bascomie nie da się zrobić wstawek asemblerowych ?? Wyliczoną sumę mógłbyś wrzucić ASM'em do siakiejś zmiennej w RAM lub do rejestru, a następnie poleceniem z Baskoma wydobyć ją i już jesteś w domu. ;) :sm19:
Aro_ - bardziej przychyliłbym się do wytłumaczenia tego które podał Freddie Chopin - niż to co ty tu wypisujesz: Nie bardzo rozumiem, czy gdzieś zaprzeczyłem wypowiedź od Freddie Chopin ? Gdzie można jeszcze używać zmiennych volatile? Jakoś nie miałem okazji używać tego specyfikatora dla zmiennych nie wykorzystywanych w przerwaniu, jedynie przy symulacjach...
O popatrz moje bajty liczysz bardzo dobrze. Wychodzi Ci 5. I to jest maksymalne zużycie w mojej wersji. A policz Twoje. Ze zmienną x wyjdzie 6. Zarówno moja wersja jak i wersja z x omija niepotrzebny dostęp do volatile. Tylko, że moja pozostaje czytelna, odpowiadająca sposobowi myślenia o problemie, a nie zwalczaniu ograniczeń kompilatora. Jeśli ograniczenia...
Nie da się. Jak dla mnie dla 16 linii io są 32 warunki. Pierwsze kopiuję stan pinN.X do zmiennej tymczasowej, potem kopiuję wartość zmiennej na okryŁ.Y. A jeśli chcesz bez tylu warunków to albo trzebaby poza zamianą nazwy portu na adres pisać wstawkę asm, albo przesiąść się na C. Dodano po 2 Dodam że Bascom obsługuje numer pinu zadany zmienną więc można...
W pierwszym przypadku w celu jak największej dokładności czasu opóźnienia jest wyliczana liczba przebiegów wewnętrznej pętli (która wykonuje się w 3 lub 4 cyklach, zależnie od tego, czy licznik może mieć 1 bajt, czy musi mieć 2 bajty) - te obliczenia są wykonywane na liczbach zmiennoprzecinkowych. Co do drugiego kodu, nie jest on funkcjonalnie taki...
To zależy bascom 8051 zawsze da dłuższy kod niż asm a to dlatego ze w nim nie można wyłączyć procedur inicjalizacyjnych (tablica wektoró przerwań, itp). W bascom avr można wyłaczyć (noinit, nosp) ale częsc będzie zawsze dopisana przez kompilator bascoma. Jeżeli używasz bascom 8051 to pomyśl nad innymi funkcjami w programie, odpowiednim ich poukładaniu....
...czy tylko wstawka asemblerowa może? Pewne jest , że gdybyś bardziej przyjrzał się standardowym bibliotekom Bascoma , to byś nie zadawał tego pytania :P Biblioteka LCD Bascoma , udostępnia np. takie procedury: _lcd_control 'wyślij rozkaz do LCD _write_lcd 'wyślij znak do LCD Parametr dla tych procedur , musi znajdować się w zmiennej _temp1(R24)....
Witam! Mam następujący problem. Otóż potrzebuje zmienić kilka parametrów w kostce Flash SST 39VF040. Odczyt pamięci poszedł bezproblemowo, jednak plik wynikowy nie jest taki jaki się spodziewałem. Podam na początek fragment listingu z odczytanego pliku *.BIN: [syntax=xml] uip_entry found_listen found_unused_connection tcp_send_synack tcp_send_syn sync_ack...
(at)krru, prawda, ale wiele bibliotek C/C++ wykorzystuje tylko same wstawki asm do implementacji najniższych warstw obsługi dużych liczb. Np. Crypto++: http://www.cryptopp.com/docs/ref/integer...
Nie wiem, czy przy Bascomie uda się wytworzyć 18 sygnałów PWM, może z wstawkami asemblerowymi. Serwo wymaga generowania impulsów o zmiennej szerokości 50 razy na sekundę, nawet ograniczając ilość położeń do 32 pośrednich położeń (dla zachowania jakiejś płynności ruchu ) to już mało czasu pozostanie na coś innego. Nawet przy ograniczonej ilości pozycji...
1. Pisz kod w znacznikach unsinged char 4. jak co zrobić ze wstawką? 5. To spod konsoli (jakiego systemu?) czy spod DOSa?
mam przerwanie w którym wykonuję operacje na zmiennych "globalnych" niestety po powrocie z przerwania moja zmienna odtwarza sobie wartość z przed przerwania. Czy jest jakaś możliwośc przekazania wartości z przerwania do programu głownego, oprócz on interrupt nosave? Witam, Sorki ale koledze chyba coś się pokręciło i to mocno.... jak już to pokaż swój...
Dziękuje Ci bardzo... teraz działa :) nie mogę niestety kliknąć pomógł bo nie ma opcji? Powiedz mi tylko dlaczego akurat wstawka asemblerowska nop po zerowaniu kolumn pomogła ? Nie rozumiem akurat jej użycia do wyeliminowania tego błędu
1. wyrzuć wszystkie komentaże 2. zamiast słów clk wstaw nazwę pinu gdzie masz wpięty sygnł zegarowy np. p3.0 3. zamiast słów data wstaw nazwę pinu gdzie masz wpięty sygnł danych np. p3.1 5. Jak program dojdzie do tej wstawki to będzie czekał na dane (na sygnał zegarowy)... 4. Akumulator jest zmienną o nazwie A i w niej będzie odebrany bajt...
dzięki za odpowiedź, ten kod w c jest jakoś dla mnie nie czytelny, a asm`a nie znam wogóle, czy ten plik rc5 asm można dołączyć w nagłówkach C?? i jak potem się do niego odwoływać, przez wstawki asm, jeśli tak to w jaki sposób zapisać dane rc5 np do zmiennej?? przepraszam za takie bezładne pytania ale kroczę jak dziecko w ciemności (wiem jak wygląda...
Witam. Mam problem mianowicie potrzebuję edytować określone znaki w zmiennej string. Coś w tym stylu że jest zadeklarowana zmienna mająca 16 znaków a ja potrzebuję zmienić znaki od 8 do 16 nie ruszając znaków 1-7. w jaki sposób można tego dokonać z poziomu bascom-a. Udało mi się zrobić to wstawką w asm poprzez wstawienie danych pod odpowiednie adresy...
No tak tylko, że w przykładzie z tamtego tematu wskaźniki otrzymują adres za pomocą: [syntax=c]... &PINB, &PORTB, &DDRB, _BV(0) ...[/syntax] a skąd moja biblioteka ma wiedzieć co to jest PINB i PORTB?;) Musiałbym dołączyć includa z definicjami portów i rejestrów...a to blokuje mi bliblitekę tylko do 1 typu AVR'a... Może też nie głupi pomysł, bo wystarczy...
Witam. Zaznaczam, że nie znam asm, piszę w C. Mam funkcję do wysyłania danych do LCD, argument jest zmienną 16 bitową, wystawiam jej starszą część na jeden port, młodszą na drugi. uC- Xmega128 void write_data(uint16_t data) { PORTC.OUT&=~(1<<wr); PORTE.OUT=data>>8; PORTF.OUT=data; PORTC.OUT|=(1<<wr);...
Mój sposób zapisu do EEPROM'u jest kompletny i nie trzeba już używać Readeeprom i Writeeeprom. Tablicy zadeklarowanej w Eram używasz jakby była zadeklarowana w RAM'ie z tą różnicą, że zmiennych w Eram nie można stosować w sposób bezpośredni w wyrażeniach, itp. Musisz daną wartość z Eram skopiować do zmiennej tymczasowej w RAM'ie, wykonać działanie i...
Witam, piszę program w C z wstawką ASM i nie starcza mi rejestrów na przekazywanie zmiennych w sposób: C: void FunkcjaC( int x, int y, int z); ASM: push EBP mov EBP, ESP mov EBX, [EBP+8] ;X mov ECX, [EBP+12] ;Y mov EDX, [EBP+16] ;Z (czyli wstawianie zmiennych do rejestrów 32bitowych) Chciałbym stworzyć sobie zmienną...
Jeśli testujesz swój ostatni program, to brakuje w nim zachowywania wartości rejestru SREG na początku przerwania. Tam jest stara wstawka, a Ja w międzyczasie napisałem nową. Zatem kol. mototest raczej testuje tą gdzie SREG jest zapisywany. Jak widać po testach czas od zgłoszenia w Mojej wstawce jest dość krótki i nie ma on zbytnio znaczenia bo kod...
W ogóle nasza wymiana zdań jest bez sensu, bo i tak nigdy nie policzymy ile to właściwie potrzeba tych obiegów. Wystarczy zmienić poziom optymalizacji, albo co się zdarza, przedefiniować jakąś zmienną i cały program nam się wykrzacza przez te delay'e. Takie rzeczy robi się na timerach, ostatecznie w ASM. Ale powtarzam: fajne wstawki assemblerowe w sieci...
Zrób tak jak radzi kolega PRL dodaj do postu (do kolejnej wypowiedzi) jako załącznik twój plik (skorzystaj z przycisku odpowiedz wtedy będziesz miał taką opcję, a nie z okienka tekstowego pod konwersacją i przycisku "odpowiedź (+2pkt)") - będzie łatwiej pomóc. Można spróbować np tak: Nie wchodząc w zasady tworzenia twojej zmiennej "szSql" Zamiast ją...
Wysyłanie danych jest oparte na wstawkach Assemblerowych i jedyne co wiem, to to, że mam wpisywać wartości do zmiennych "kanal(). Nie znam ASM, więc jest mi ciężko cokolwiek zrobić. Tę procedurę zostawiam w spokoju, niech działa tak jak jest Chcę tylko (albo aż) kanal(1), kanal(2), kanal(3) zamienić na LED1 kanal(4), kanal(5), kanal(6) na LED2 kanal(7),...
Witam, Potrzebuję wycisnąć a ATmegi32 maksymalną prędkość ADC. znalazłem wiele artykułów, i w większości z nich zrobione są wstawki w języku Assembler, dzięki którym Atmega korzysta tylko z 8 bitów przetwornika. Wiem że ustawia się to bitem w rejestrze "ADLAR", ale niestety całość musi być napisana w ASM, bo Bascomowa komenda "getadc()" i tak konwertuje...
no to ja z sugestiami od poczatku kodu lece: 0. #define led_off PORTB |= (1<<0); dobry zwyczaj to uzywanie wielkich literek przy define. do tego na koncu calych linijek ktore definiujesz NIGDY nie nalezy stawiac srednika. do tego zwyklo sie nazywac makro_funkcje z uzyciem nawiasow jednak czyli np LED_OFF() no i chyba to: #define _repeat = 9028...
Witam Dolacze sie do tego tematu, bo wspomniane bylo o ksiazce "Mikrokontrolery AVR programowanie w jezyku C". Czy ktos z Was robil przyklady z tej ksiazki. Chodzi mi konkretnie o ten z obsluga lcd. Autor stworzyl dosc sensowna i jak twierdzi optymalna pod wzgledem zajetosci pamieci przez kod wynikowy (w co akurat wierze) biblioteke do obslugi wyswietlacza...
Sprawdzam, co jest przydatne - x/0; daje "undefined operation" a nie "div by zero" Akurat ostatnio się tym bawiłem i aby dzielenie przez zero wywołało faulta (Usage Fault), to trzeba sobie to włączyć w odpowiednich rejestrach rdzenia. 1. Jak to się dzieje że r1 jest argumentem funkcji? Gdzie jest to opisane? r1 nie jest argumentem funkcji, tylko jej...
A widzisz tam gdzieś procedury dla powtarzających się fragmentów kodu? A widzisz może stałą znakową dla tych samych lub bardzo podobnych napisów? Zobacz jak skomplikowano warunki (niepotrzebnie), ile razy używano rozkazu Locate zamiast "ubrać" to w procedurę, nie stosowano lcd chr(xx), stosowano wyświetlenie zmiennych w najprostszy, pamięciożerny sposób...
Jeśli chodzi o samo przerwanie to wywoływane jest oczywiście z atrybutem naked, i całe będzie w asemblerze. Natomiast napisanie kilku KB kodu jako wstawka asemblerowa kompatybilna do reszty programu wyprowadziłoby mnie z równowagi. Wystarczy jak piszę większy algorytm w asemblerze (jako wstawka w C) to i tak wywala sporo błędów, nad którymi mecze się...
1. Masz błędny tytuł postu - nie chodzi o żadne wstawki asemblerowe, a o łączenie C z asemblerem, czyli program hybrydowy. 2. Po co Ci te moduły i procedury asemblerowe? Kompilator C doskonale sobe radzi z dostępem do rejestrów. 3. Gdzie i jak zadeklarowałeś zmienną numByte? Jaki błąd sygnalizuje kompilator.
romsik ; Wstawki asemblerowe (str. 44 dokumentacji pdf): _asm ... _endasm; Bezwzględne pozycjonowanie kodu funkcji - na pewno jest to Tobie potrzebne? Rzut oka na dokumentację pokazuje, że można bezwzględnie lokować zmienne oraz można wybierać adres początkowy całego kodu (poprzez opcję linkera). Dość dawno zapoznawałem się z SDCC i chyba nie było...
No więc już pisze: 1) chcąc ułatwić pisanie wstawek jest w bascomie coś takiego: zamiast pisać adres zmiennej można napisać jej nazwe w nawiasie klamrowym. wszystko ok ułatwia to sprawe. Dim var As Bit SETB {var} Jest jedno ALE. spróbuj zadeklarować inną zmianną niż BIT lub BYTE. Przy odwołaniu do niej przez nawias kompilator nie wyświetki błędu tylko...
Witam, program ma na celu obliczanie silni, musi on być napisany w języku C z wstawką assemblera AT&T obliczającą samą wartość silni. Kod wstawki: __asm__( "movl $1,%ecx\n" "movl $1,%eax\n" "movl _n,%edi\n" "petla:\n" "mull %ecx\n" "incl %ecx\n" "cmpl %edi,%ecx\n" "jna...
Bzdura. Wystapienie dowolnego wyjatku pod rozbiegowkami z Keila (nie wiem jak z innymi) powoduje wpadniecie w nieskonczona petle bedaca napisana w asmie dokladnie pod adresem tego wektora. HardFault_Handler: B HardFault_Handler - dotyczy glownie wyjatkow niemaskowalnych. Przerwanie od DMA jest maskowalne wiec jest obslugiwany przez handler defaultowy...
A ja napisze to troche inaczej. Sytuacje na rynku, poza oczywiście kwestia marketingu czy reklamy, tworzą ludzie. Jak widzę te dyskusje i nie tylko tą na forum. Myśle że można ich podzielić na dwa obozy. Jeden to informatycy, drugi to elektronicy. Pomimo że są tacy co znają dobrze dwie dziedziny, jest pewna jednak różnica, co widze od dość dawna. Informatycy...
Hej. Zastanawiam się, jak w C stworzyć najestetyczniej rejestr przesuwny kilkuset bitowy. Na początek robiłem to ze zmienną uint64_t: [syntax=c]buf<<=1 if(dat... buf |= 1[/syntax] , ale okazuje się, że to za mało bitów. Zwiększyłem zakres do 128 bitów: [syntax=c]if(bufl & 0x80) carry = 1; else carry = 0; bufl<<=1; bufh<<=1; if(ca...
1. TAK. Używając do sterowania tylko adresu 0x378 (lub 0x278) możesz sterować 4 silniki (w LPT piny: 2..9). 2. Można użyć większych napięć, ale trzeba odseparować je od LPT, ponieważ uszkodzenie tranzystora może spowodować zniszczenie portu. 3. TAK. 4. Trzeba wykorzystać wstawkę asemblerową: asm mov DX , $378 mov AL , Bajt out DX , AL end; Gdzie do...
Nie, takie coś, to wstawki assemblerowe w kod. Ja chcę oddzielnie zasemblerować kod assemblera (otrzymam plik .obj) i dołączyć go do buildera (Add to project). Plik się dodaje, nie ma błędów, ale w builderze nie widać assemblerowych procedur.
czy program skladający się z poleceń bascoma i wstawek assemblerowych będzie zajmował mniej miejsca niż taki sam program napisany tylko w bascomie?? Będzie zajmował mniej miejca. Najwięcej możesz zaoszczędzisz zastępując pętle i IF-y a także dodawanie/odejmowanie na zmiennych dwubajtowych. Mnie się udawało zbić 20-30% kodu jak próbowałem się zmieścić...
Odnośnie pytania A do czego służą wstawki asemblerowe i czy są konieczne? Tiny13 ma tylko 64bajtów SRAM Mikrokontroler nie potrafi bezpośrednio zapisać wartości do zmiennej. Kiedy więc ma ustawić w zmiennej 20ms wartość 1 to musi najpierw załadować wartość 1 do jakiegoś podręcznego rejestru a potem wyładować te wartość do zmiennej 20ms. Rejestrów jest...
Konstrukcja bardzo fajna i przy kosztach ogrzewania w dzisiejszych czasach nawet wskazana :) Ciekawi mnie czy można takie coś wpiąć w pion kominowy z cegły, czy trzeba robić wstawkę z kwasówki ? Panowie obrońcy prawa, fajnie jest spać spokojnie i mieć świadomość, że żyjemy zgodnie z obowiązującymi przepisami. Pytanie tylko jakim kosztem? Żyjemy w klimacie...
czy ja mowilem o wstawkach na jeden rozkaz? wiesz ze do tych wstawek mozna wrzucic bardzo bardzo bardzo duzo rozkazow i wtedy zaczynaja sie problemy? prosty przyklad - szukanie wartosci maxymalnej: asm volatile(" \n \ mov [%[vect]++],%[max ... \n \ mov [%[vect]++],w2 \n \ do %[vect_l],1f \n \ cp...
Może użyj czegoś takiego : <?php $filename = basename($_SERVER['REQUEST_URI'&... ".php"); $filename = $filename.".php"; echo "Data ostatniej modyfikacji pliku $filename, to : " . date ("F d Y H:i:s.", filemtime($filename)); ?> Możesz to wkleić do dowolnego skryptu,...
(at)kamyczek Niestety niewiele osób używa symulatora, bo gdyby używali to nie byłoby wielu pytań na elektrodzie. Ale to nie znaczy, że ciągle należy siedzieć w ciemnogrodzie - w końcu trzeba zrobić krok naprzód i używać narzędzi, które się ma. Co do wstawek - oczywiście, że w asembler można wstawiać wstawki w C. Oba języki można dowolnie przeplatać...
Witam. Wstawki .asm w gcc to nie takie "hop siup". Piszę w gcc. Kiedyś miałem potrzebę zrobienia kawałku kodu w asmie i wcale tak łatwo nie poszło. Szczególnie jeżeli chodzi o przekazywanie i zwracanie zmiennych przez funkcje. Ale skoro znasz asembler dla x386 łatwo sobie poradzisz. Wiesz co to są rejestry, adresowanie pamięci, itd. Wystarczy kilka...
Witam. Zabrałem się za pisanie biblioteki do obsługi interfejsu SCI w ww. kontrolerze w języku C. Transmisja i odbiór są realizowane w przerwaniach. Tu mam problem. W procedurze obsługi przerwania wywołanego pojawieniem się odebranego znaku w buforze muszę skasować flagę przerwania (RDRF). Skasować ją można sekwencją: - odczyt SCISR - odczyt SCIDR Robię...
wyświetlić zmienną zmienną rejestrze string zmienną
excel makro zmiana wartość instrukcja sterownik sprężarka wałka laserowej
Ford Fiesta Mk6 1.3 benzyna łańcuch - kolizyjność Z jakiego metalu są wykonane synchronizatory?