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 7 maja 2025, o 19:06


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 19 lis 2013, o 01:49 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2013
    Posty: 143
    Pomógł: 1

    Bawiłem się dzisiaj różnymi funkcjami bibliotecznymi i sprawdzałem ilość zużywanej przez nie pamięci :)

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

    kompilator grzecznie kulturalnie wyrzucił (dla ATMega8):
    Program: 100 bytes (1.2% Full)
    (.text + .data + .bootloader)
    Data: 0 bytes (0.0% Full)
    (.data + .bss + .noinit)

    ale kiedy w funkcji _delay_ms() użyłem wyrażenia:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    kompilator poinformował mnie że zjadł pół procesora :lol:
    Program: 3640 bytes (44.4% Full)
    (.text + .data + .bootloader)
    Data: 264 bytes (25.8% Full)
    (.data + .bss + .noinit)
    Pewnie większość osób to wie ale ja osobiście byłem w głębokim szoku... Cały "program" miał może 20 linii kodu.... Myślę że dla początkujących jak ja przypadkowe zastosowanie funkcji w ten sposób byłoby niezłą zagadką :shock: Program w assemblerze ma 1800 linii podczas gdy program w którym wykorzystuję enkoder,lcd2x16,IR i rozbudowane menu tmf'a zajmuje 1400 :o

    PS. kolejny argument żeby bibliotekę delay.h omijać szerokim łukiem :roll:

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lis 2013, o 07:17 
    Offline
    Moderator
    Avatar użytkownika

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

    Ale natknąłeś się na to co niestety przechodzi z bólem każdy początkujący w C a nie wiesz o pewnej oczywistej rzeczy, którą po raz kolejny wytłumaczę ... bo pewnie w Bluebooku umknęło ? ;)

    Do funkcji opóźniających typu _delay_xx() w AVR GCC przekazujemy TYLKO I WYŁĄCZNIE stałe dosłowne. Co ciekawe mogą to być wtedy nawet liczby zmiennoprzecinkowe np: 0.3 ;)

    Pod żadnym pozorem nie można używać zmiennych a szczególnie jeszcze robić takich obliczeń w nawiasach w miejscu argumentu ;) ... dlaczego i skąd się bierze nagle takie zwiększenie objętości kodu ? ... to dość proste ....

    otóż argumentem funkcji jest liczba zmiennoprzecinkowa - która jednak, gdy podamy ją w postaci stałej dosłownej zostaje zawsze zamieniona przez kompilator na liczbę całkowitą i dzięki temu kompilator nie musi dociągać biblioteki do obsługi liczb zmiennoprzecinkowych ;) to stąd następuje taki przyrost kodu .... Przez dociągnięcie tej biblioteki - stąd podstawowy wniosek że przede wszystkim należy unikać jak ognia liczb zmiennoprzecinkowych - szczególnie w małych prockach .....

    No zwykle w tym momencie ktoś się dziwi - to jak to ? w takim razie jak uzyskać zmienną ilość opóźnienia jeśli nie można zastosować zmiennej jako argument - ano można można .... ale z kolei tak (też ten sposób już niejednokrotnie pokazywałem na forum nie tylko w książce) ;) zobacz:

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


    jak widzisz wystarczy jedna mała funkcja i po zawodach ;) wtedy możesz jej użyć tak:

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


    bez obaw że ci kod przyrośnie i będzie się coś źle działo.


    Autor postu otrzymał pochwałę

    _________________
    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: 19 lis 2013, o 10:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 paź 2013
    Posty: 62
    Pomógł: 2

    Prawda!
    Dzięki tej malutkiej funkcji upchnąłem w jednym ze swoich początkujących programów 3 (słownie TRZY) zmienne opóźnienia i zmieściłem się z tym w ATTINY13 :D
    my_delay ( u mnie zwana opozniarka :D) częto ratuje życie :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lis 2013, o 11:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lip 2013
    Posty: 143
    Pomógł: 1

    generalnie staram się nigdy tej biblioteki nie używać bo poznany dzięki Tobie Mirku mechanizm timerów programowych jest równie prosty w obsłudze a ma charakter nieblokujący :) nie sposób zapamiętać niestety każdego słowa z książki nawet jeśli czyta się ją kilka razy od deski do deski :)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lis 2013, o 11:26 
    Offline
    Moderator
    Avatar użytkownika

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

    krzysztof napisał(a):
    nie sposób zapamiętać niestety każdego słowa z książki nawet jeśli czyta się ją kilka razy od deski do deski


    Ależ to zrozumiałe i dlatego opisałem to jeszcze raz - co za problem ;) im częściej to się na forum pojawi tym częściej ktoś trafi na to ;)

    A jeśli chodzi o delaye to jak najbardziej najlepiej ich unikać jak ognia. Nie mniej z nimi jest tak jak np z alkoholem ;) też jest dla ludzi ale trzeba stosować z umiarem i z głową ;)

    Myślę, że kiedyś pokażę taką ciekawostkę ... jak z delaya zrobić prawie timer programowy :lol: .... oczywiście to będzie proteza i nie warto tego stosować na co dzień szczególnie rozumiejąc już normalne timery programowe - ale myślę że takie inne spojrzenie na pewne podejście do zagadnienia - zawsze pomoże komuś inaczej bądź lepiej zrozumieć co oznacza "NIEBLOKUJĄCY charakter" funkcji itp ;)

    _________________
    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: 19 lis 2013, o 14:05 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Genialne w swej prostocie :) ! Nie używam co prawda delay, ale warto wiedzieć co tam siedzi i jak to obejść, a przy okazji stosowanie makr mi się utrwala ;)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lis 2013, o 16:46 
    Offline
    Użytkownik

    Dołączył(a): 10 lip 2013
    Posty: 93
    Lokalizacja: Puławy
    Pomógł: 0

    Ok a jak działa ta funkcja delay()?
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Jest lepsza? Co to robi? :P



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lis 2013, o 17:04 
    Offline
    Użytkownik
    Avatar użytkownika

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

    NOP w asemblerze to znaczy nic nie rób i zajmuje to 1 cykl zegarowy. Warunek While będzie wykonywany tyle razy ile będzie zawierać zmienna n plus parę cykli na obsługę samej pętli. Takie coś potrzebne jest już do bardzo dokładnych wyliczeń. Pamiętam jak mozolnie w Commodore+4 dobierałem ilość NOP żeby wyjść z obrazem poza ramkę obrazu czyli zamiast oryginalnych 25 lini uzyskałem 33(!) linie tekstowe. Każdy NOP był tam na wagę złota, bo inaczej wszystko się rozjeżdżało i nie było synchronizacji.

    _________________
    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: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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