Rewelacja Panie Mirku. Kolejny super poradnik. Ja tylko czekam na kolejne bo po prostu się je chłonie Klikam wszystko co popadnie jeżeli chodzi o YT, i inne społeczności. Czy jest szansa na dołączenie kodu? Pozdrawiam serdecznie i dużo zdrowia życzę!!!
Witam Panie Mirku i dziękuję za kolejną część. Spodziewałem się tego odcinka na weekend, a tu ciach,jest na początku tygodnia. Zaskoczenie podwójne,oczywiście w pozytywnym tego słowa znaczeniu. Kiedy moja ukochana żona zobaczyła radość na mojej twarzy,powiedziała: -Teraz już wiesz jak to jest, kiedy się czeka na kolejny odcinek serialu :-) Pozdrawiam no i łapki w górę oczywiście.
Witam, Powód dlaczego w czasie analizy programu zamiast lsl widzimy add ma proste, a wręcz banalne, wytłumaczenie. Cytując naszego klasyka "wystarczy zajrzeć do odpowiedniego pdf-a" ;) 8 bitowe AVRy nie mają rozkazów LSL, ROL, CLR, TST, SBR, CBR i większości rozgałęzień (branchów) podawanych w dokumentacjach procesora. Tak na prawdę rozkaz asemblerowy "LSL Rd" jest bitowo dokładnie tym samym kodem (opcode) co rozkaz "ADD Rd, Rd". Dla "LSL Rd" opcode wygląda następująco: 0000 11 d4 d4 d3 d2 d1 d0 d3 d2 d1 d0 a dla "ADD Rd, Rr" mamy opcode: 0000 11 r4 d4 d3 d2 d1 d0 r3 r2 r1 r0 więc jak Rr będzie równe Rd, to opcode będą identyczne. Tak samo z rozkazami "ROL Rd" który jest zgodny z "ADC Rd, Rd" oraz innymi pozostałymi parami. AVRy to procesory RISC (Reduced Instruction Set Computers), więc z założenia mają mało instrukcji a dzięki sztuczce "marketingowej" użytkownik dostaje dodatkowe rozkazy w asemblerze (także dzięki temu nie musi się skupiać na podstawach matematyki i pamiętać że ADD Rd, Rr przy Rr = Rd to jest LSL Rd a może zająć się programowaniem).
I dlatego deasemblerowany kod zawiera podstawowe znaczenie danego opcode (skąd deasembler ma widzieć jakiego mnemonika chciał autor użyć).
Poniżej komplet "sztucznych" instrukcji: SBR Rd,K -> ORI Rd, K CBR Rd,($FF - K) -> ANDI Rd, K TST Rd -> AND Rd, Rd CLR Rd -> EOR Rd, Rd LSL Rd -> ADD Rd, Rd ROL Rd -> ADC Rd, Rd wszystkie instrukcje rozgałęzień (branch) -> BRBS, BRBC
Wszystko to można znaleźć (sprawdzić) w Atmelowym pdfie http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf
Panie Robert dziękuję za ŚLICZNE wyjaśnienie, sam lepiej bym tego nie zrobił a tu przyda się ono olbrzymiej ilości osób .... TO nazywa się dzielenie wiedzą, jeszcze raz dzięki i pozdrawiam ;)
A ja ostatnio znalazłem coś takiego: http://thegaragelab.com/galleries/quickies/one_pin_serial.png Tutaj zaimplementowano UART na 1 pinie (half duplex) - ciekawe rozwiązanie - a piszę o tym tutaj bo to maleńka biblioteczka ASM (62b flash i nie zużywa ram) - może takie rozwiązanie też pokazać czytelnikom w którymś z odcinków? Może np zaprzęgając do pracy Attiny85? a może nawet Attiny 13? :) - fajna byłaby to opcja debugowania dla tych super małych AVRków. Kod w tym miejscu: https://github.com/thegaragelab/nightlight/blob/master/firmware/softuart.S
Czy używanie tej opcji wyrzucania zbędnych funkcji z pamięci flash ,można użyć np. zamiast dyrektyw preprocesora ,co ma się nam kompilować ,a co nie. Taka opcja dla "leniwych" ,bo powiedzmy mam dużą bibliotekę bez tych dyrektyw co kompilować a co nie. I wiele funkcji nie używanych w main mi się nie potrzebnie kompiluje.
Mogę to traktować jako "złoty środek" w każdej okoliczności? ,pozdrawiam.
Rewelacja Panie Mirku. Kolejny super poradnik. Ja tylko czekam na kolejne bo po prostu się je chłonie Klikam wszystko co popadnie jeżeli chodzi o YT, i inne społeczności. Czy jest szansa na dołączenie kodu? Pozdrawiam serdecznie i dużo zdrowia życzę!!!
OdpowiedzUsuńale masz na myśli ten krótki kod który pisałem na żywo w poradniku ?
UsuńTo już wiem za co się wezmę jak nabiorę praktyki w C:)
OdpowiedzUsuńObejrzałem tylko z ciekawości, bo jak na razie nie mam pojęcia o ASM...
Witam Panie Mirku i dziękuję za kolejną część.
OdpowiedzUsuńSpodziewałem się tego odcinka na weekend, a tu ciach,jest na początku tygodnia.
Zaskoczenie podwójne,oczywiście w pozytywnym tego słowa znaczeniu.
Kiedy moja ukochana żona zobaczyła radość na mojej twarzy,powiedziała:
-Teraz już wiesz jak to jest, kiedy się czeka na kolejny odcinek serialu :-)
Pozdrawiam no i łapki w górę oczywiście.
Dlatego proszę ode mnie przekazać serdecznie pozdrowienia dla małżonki ;)
UsuńWitam,
OdpowiedzUsuńPowód dlaczego w czasie analizy programu zamiast lsl widzimy add ma proste, a wręcz banalne, wytłumaczenie. Cytując naszego klasyka "wystarczy zajrzeć do odpowiedniego pdf-a" ;)
8 bitowe AVRy nie mają rozkazów LSL, ROL, CLR, TST, SBR, CBR i większości rozgałęzień (branchów) podawanych w dokumentacjach procesora. Tak na prawdę rozkaz asemblerowy "LSL Rd" jest bitowo dokładnie tym samym kodem (opcode) co rozkaz "ADD Rd, Rd".
Dla "LSL Rd" opcode wygląda następująco:
0000 11 d4 d4 d3 d2 d1 d0 d3 d2 d1 d0
a dla "ADD Rd, Rr" mamy opcode:
0000 11 r4 d4 d3 d2 d1 d0 r3 r2 r1 r0
więc jak Rr będzie równe Rd, to opcode będą identyczne.
Tak samo z rozkazami "ROL Rd" który jest zgodny z "ADC Rd, Rd" oraz innymi pozostałymi parami.
AVRy to procesory RISC (Reduced Instruction Set Computers), więc z założenia mają mało instrukcji a dzięki sztuczce "marketingowej" użytkownik dostaje dodatkowe rozkazy w asemblerze (także dzięki temu nie musi się skupiać na podstawach matematyki i pamiętać że ADD Rd, Rr przy Rr = Rd to jest LSL Rd a może zająć się programowaniem).
I dlatego deasemblerowany kod zawiera podstawowe znaczenie danego opcode (skąd deasembler ma widzieć jakiego mnemonika chciał autor użyć).
Poniżej komplet "sztucznych" instrukcji:
SBR Rd,K -> ORI Rd, K
CBR Rd,($FF - K) -> ANDI Rd, K
TST Rd -> AND Rd, Rd
CLR Rd -> EOR Rd, Rd
LSL Rd -> ADD Rd, Rd
ROL Rd -> ADC Rd, Rd
wszystkie instrukcje rozgałęzień (branch) -> BRBS, BRBC
Wszystko to można znaleźć (sprawdzić) w Atmelowym pdfie http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf
--
Pozdrawiam,
Robert
Panie Robert dziękuję za ŚLICZNE wyjaśnienie, sam lepiej bym tego nie zrobił a tu przyda się ono olbrzymiej ilości osób .... TO nazywa się dzielenie wiedzą, jeszcze raz dzięki i pozdrawiam ;)
UsuńA ja ostatnio znalazłem coś takiego: http://thegaragelab.com/galleries/quickies/one_pin_serial.png
OdpowiedzUsuńTutaj zaimplementowano UART na 1 pinie (half duplex) - ciekawe rozwiązanie - a piszę o tym tutaj bo to maleńka biblioteczka ASM (62b flash i nie zużywa ram) - może takie rozwiązanie też pokazać czytelnikom w którymś z odcinków? Może np zaprzęgając do pracy Attiny85? a może nawet Attiny 13? :) - fajna byłaby to opcja debugowania dla tych super małych AVRków. Kod w tym miejscu: https://github.com/thegaragelab/nightlight/blob/master/firmware/softuart.S
Bardzo fajny przykład i na pewno będę chciał kiedyś wspomnieć i o tego tupu wstawkach czyli pisaniu plików *.S ;)
UsuńByłoby super - mam nadzieję, że taki odcinek pojawi się niebawem (trzymam kciuki) jako kolejna część wstawek ASM :)
UsuńCzy używanie tej opcji wyrzucania zbędnych funkcji z pamięci flash ,można użyć np. zamiast dyrektyw preprocesora ,co ma się nam kompilować ,a co nie. Taka opcja dla "leniwych" ,bo powiedzmy mam dużą bibliotekę bez tych dyrektyw co kompilować a co nie. I wiele funkcji nie używanych w main mi się nie potrzebnie kompiluje.
OdpowiedzUsuńMogę to traktować jako "złoty środek" w każdej okoliczności? ,pozdrawiam.
Zobacz sobie na programik: ECLIPSE GADGET
Usuńhttp://atnel.pl/eclipse-gadget.html
i jego opcję o nazwie BOOST, którą można włączyć ;) ona właśnie to robi i można to zrobić dla każdego projektu