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



Teraz jest 18 sty 2025, o 07:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 27 lut 2014, o 19:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Przegrzebałem forum i niestety nie znalazłem odpowiedzi (może po prostu nie wiem czego szukać).
Ostatnio zacząłem się bawić w usypianie procka oczywiście już w C i wiem, że jest do tego biblioteka, z której jednak nie chciałem korzystać , bo wygenerowało mi kod dłuższy o 24 bajty (dla attiny13 to już ma znaczenie). Zmierzam do tego, że poustawiałem sobie w rejestrach wg pdf odpowiednie bity i dopiero później doczytałem, że aby procesor usnął powinna być wykonana maszynowa instrukcja "sleep". Oczywiście przekopiowałem sobie ją żywcem z biblioteki jako wstawkę i wszystko pięknie działa tylko, że ja lubię wiedzieć dlaczego i przede wszystkim JAK to działa. Przeszukałem masę linków niestety w większości do anglojęzycznych tematów, a niestety mój angielski ...ech lepiej nie mówić :) i nadal nie znam zasady jaką kierował się autor pisząc coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Chciałbym się dowiedzieć dlaczego jest aż tak skomplikowany zapis zwykłego pojedynczego rozkazu asm:
Czy tego nie da się zrobić jakoś prościej? Przykładowo w Bascomie można by go wpisać po prostu SLEEP jako jedno słowo w jednej linii bez zbędnych kombinacji.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2014, o 21:30 
Offline
Moderator
Avatar użytkownika

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

da się zrobić i to bez asemblera:

http://www.nongnu.org/avr-libc/user-man ... sleep.html

sleep();

wcześniej ustawiając odpowiedni tryb powerdown

_________________
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: 27 lut 2014, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

No wlasnie Mirku o tej bibliotece wspominalem i nie chce z niej korzystac, a tylko poznac ta dziwna i rozbudowana skladnie wstawki jednego rozkazu asemblera.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2014, o 22:20 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Skoro nikt mądrzejszy się nie garnie to może ja :-)
asm - wiadomo, słowo kluczowe wskazujące kompilatorowi, że to wstawka
volatile - nie pozwala kompilatorowi na zbyt agresywną optymalizację i wycięcie fragmentów, które uzna za niepotrzebne.
"sleep" - mnemonik, wiadomo
"\n\t" - w zasadzie niepotrzebny, ale rzekomo poprawia wygląd listingów. Jest to string składający się z dwóch (!) znaków - znaku nowej linii oraz tabulatora. Niektóre kompilatory (a może wszystkie?) dwa stringi jeden za drugim uznają za jeden, czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to jest w efekcie to samo co
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

dwukropki w nawiasie po stringach - dwukropki oddzielają parametry polecenia, 'sleep' nie ma parametrów więc pola są puste, ale trzeba je podać
No i jeszcze, jakże seksowne, znaki podkreślenia przy słowach kluczowych. Tu http://www.nongnu.org/avr-libc/user-manual/inline_asm.html jest coś nabazgrane na ten temat. Chodzi o uniknięcie jakiś warningów, nie bardzo mi się chce w to wgłębiać (w tej chwili).


Autor postu otrzymał pochwałę

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2014, o 22:27 
Offline
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
No wlasnie Mirku o tej bibliotece wspominalem i nie chce z niej korzystac, a tylko poznac ta dziwna i rozbudowana skladnie wstawki jednego rozkazu asemblera.


Sorki to może źle doczytałem ...

ale tak jak kolega wyżej pisał ....

najprostsze użycie wstawki asm to:

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


nawet i bez volatile to zadziała, ale już np dla NOP'ów lepiej dać volatile

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

_________________
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: 28 lut 2014, o 11:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

No panowie takimi odpowiedziami jestem w pełni usatysfakcjonowany. Czyli jednak można bez "_" i pozostałych dodatków :)
Nie ukrywam, że właśnie fantazje w postaci __podkreślników__ długo mnie odpychały od rozpoczęcia nauki C, po prostu nie wiem czemu, ale ich nie lubię... wg mnie nie pomagają ,a wręcz utrudniają pisanie i analizę kodu. Zainteresowałem się wstawkami asm, bo coś mi się wydaje, że po 20-latach przerwy zacznę się chyba przepraszać z asemblerem ;)

Dla chętnych wersja usypiania dla ATtiny13, którą sam sobie nagryzmoliłem :) Zajmuje mnie niż wykorzystanie bibliotki "sleep.h" co ma spore znaczenie dla małych procków.

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


Wyłączenie komparatora dobrze jest wstawić już na samym początku programu, a podciągnięcie INT0 do "+" jest niezbędne i można to zrobić prawie w dowolnym momencie byle przed wejściem w tryb snu. Po prostu ta końcówka może być też użyta w innych celach.

_________________
http://www.sylwekkuna.com



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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO