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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 1 maja 2025, o 22:58


    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: 1968
    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 1968
    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

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