Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 16 sty 2025, o 06:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 15 cze 2013, o 09:15 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

A to nie jest tak, ze jak uzywasz ISR_NAKED to przynajmniej reti musisz wykonac?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2013, o 09:21 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27346
Lokalizacja: Szczecin
Pomógł: 1041

wtedy kiedy operacje w przerwaniu nie będą wykorzystywały rejestrów procesora albo wtedy gdy obsługę ISR napiszesz sobie jako wstawkę asemblerową i sam odłożysz stosowne bajty na stos a później zdejmiesz. Tyle że w tym konkretnym przypadku nawet jeśli zrobisz to sam w asemblerze to zyskasz może tylko 1-2 rozkazy związane ze stosem (push i pop)

czyli co to znaczy że nie będą wykorzystywane rejestry ? np:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


taka najprostsza operacja zostanie w asemblerze zamieniona na jeden rozkaz asemblerowy

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czyli nie wymaga rejestrów ani (CO WAŻNE) nie zmienia znaczników

ale już twoje inkrementowanie zmiennej z RAM jak zrobić bez rejestrów w asemblerze AVR ? nie da rady ;)

musi to być mniej więcej coś takiego

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


mogłem pomylić się co do mnemoników i ich użycia bo już dawno asemblera nie używałem ;) ale jak widzisz użłem rejestru R16 - czyli musiałbym już go przynajmniej odłożyć. A skoro robię zwiększanie o 1 to zmienią się znaczniki więc i rejestr SREG też trzeba odłożyć - więc wyszłoby mniej więcej coś takiego

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czyli już praktycznie masz prolog i epilog jak w C bez ISR_NAKED - no może dojdzie tam jeszcze odłożenie rejestru R0 - możesz zajrzeć i porównać sobie w pliku *.lss

czyli reasumując daj sobie spokój z ISR_NAKED w tak prostym kodzie obsługi przerwania bo i tak kompilator zrobi to bardzo dobrze ;) ... no chyba że chcesz w celach ćwiczebnych pisać wstawki asm - to ok

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2013, o 11:00 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27346
Lokalizacja: Szczecin
Pomógł: 1041

Cytuj:
1. Rozumiem, że w celu inkrementowania zmiennej należy skorzystać z rejestru. Czy w przypadku prostego przypisania jakieś wartości do zmiennej rownież korzystam z rejestru?
Chodzi mi o np. coś takiego: timer2_flag = 1;

2. Nie bardzo czuję dlaczego zmieniają się znaczniki w SREG podczas inkrementacji zmiennej. Da sie to jakoś w kilku słowach wyjaśnić?


oczywiście, że wszystko da się wyjaśnić - ale wiesz - to jest kwestia już nauki pisania kodów w asemblerze - i stąd doładnie to wszystko wynika. Więc tak w oderwaniu od asemblera to trudno w szczegółach wyjaśnić a więc w uproszczeniu ;)

1. oczywiście, że tak bo nie ma w asemblerze AVR bezpośredniego zapisu stałej do pamięci RAM, musi to być zrobione za pomocą rejestru. Musisz po prosty też poczytać opisy rozkazów asm a sporo ci się wyjaśni co możesz a czego nie ;)

2. bo w asemblerze panie kochany są znaczniki operacji arytmetycznych np CarryFlag (przeniesienie) i podobne ... i w asemblerze korzysta się z tych znaczników jak byś jadł bułkę z kiełbasą ;) ... a programując w C - czochra cię to doszczętnie ;)

3. ..... aaaa! nie było trzy ;)

------------------------ [ Dodano po: 1 minucie ]

i teraz tak - oczywiście w szczegółach mogłem coś pokrębasić np z tym dodawaniem inc r16, a co za tym idzie nie pamiętam tak na prawdę też już dokładnie czy to zmienia znacznik carry ale chyba tak bo jak dodasz do 255 liczbę 1 to musi nastąpić przeniesienie ;) ... dlatego jeszcze raz powiem - po szczegóły - to w tył zwrot i do asemblera marsz ;)

------------------------ [ Dodano po: 2 minutach ]

Antystatyczny napisał(a):
Całą tę nagość chcę jedynie przećwiczyć i zrozumieć kiedy mogę sobie pozwolić na brak prologu i epilogu


nagość będziesz mógł uprawiać - gdy poznasz właśnie chociaż podstawy asemblera - wtedy ganiaj nago ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2013, o 20:29 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Trzeba będzie Mirku utworzyć nowy dział w dział w kategorii PROGRAMOWANIE.

Bardzo miło wspominam zabawę asemblerem AVR :) . Chętnie sobie przypomnę. Może podpowiem parę rzeczy. Warto na początek przeczytać i mieć pod ręką:
- AVR Instruction Set Manual
- AVR Assembler User Guide / AVR Assembler 2 User Guide
- przykłady ze specyfikacji mikrokontrolera

Z pierwszej pozycji dowiesz się m.in. dlaczego instrukcja w przykładach instrukcja ldi nie używa R0 tylko R16. Przewodnik użytkownika daje informację o tym co poza rozkazami jest potrzebne m.in. o sekcjach w pamięci mikrokontrolera takich jak .cseg .dseg
Tu jako środowisko najlepiej moim zdaniem nadaje się AVR Studio 4.19 ze względu na symulator, ale oczywiście możesz pozostać przy Eclipse.

Dostępne są książki Mikrokontrolery AVR ATmega w praktyce i Mikrokontrolery AVR ATtiny w praktyce, ale bez nich też dasz sobie radę. Za darmo możesz mieć przykładowe kody z tych książek a w nich m.in. DFT.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2013, o 20:41 

Pomógł: 0

Atmega w praktyce mogę pożyczyć bo kurzy mi się na półce.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2013, o 21:49 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27346
Lokalizacja: Szczecin
Pomógł: 1041

Krauser napisał(a):
Trzeba będzie Mirku utworzyć nowy dział w dział w kategorii PROGRAMOWANIE.


Racja! aż się zdziwiłem teraz - że nie ma działu Asembler ;) ... niedługo utworzę

------------------------ [ Dodano po: kilkunastu sekundach ]

Krauser napisał(a):
Dostępne są książki Mikrokontrolery AVR ATmega w praktyce i Mikrokontrolery AVR ATtiny w praktyce,


Mam obydwie i bardzo wysoko je sobie cenię jeśli chodzi o asemblera i przykłady - na prawdę z nimi można dużo szybciej ogarnąć asm ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO