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? 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 20 lip 2025, o 03:21


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
    Autor Wiadomość
    PostNapisane: 2 gru 2019, o 19:08 
    Offline
    Użytkownik

    Dołączył(a): 05 gru 2017
    Posty: 435
    Lokalizacja: Puck
    Pomógł: 7

    Witam

    Mam mały orzech do zgryzienia, mianowicie tworzę menu w którym jest wiele zmiennych
    to jest - dla ustawienia wyjścia nr 0 portu A używam zmiennych o nazwach

    *********** 1 ustawienie ******************************
    _1_on_h dla ustawienia godzin włączania
    _1_on_m dla minut
    _1_on_s dla sekund
    _1_on_wy dla włączenia pinu 0 portu A ( wpisuje 1,2,3 do 8 )

    dla wyłączenia

    _1_off_h dla ustawienia godziny wyłączenia
    _1_off_m dla minut
    _1_off_s dla sekund
    _1_off_wy dla wyłączenia pinu 0 portu A ( wpisuje 1,2,3 do 8 )

    *******************************************************

    dla wyjścia 1 portu A
    ************ 2 ustawienie *********************************
    _2_on_h dla ustawienia godzin włączania
    _2_on_m dla minut
    _2_on_s dla sekund
    _2_on_wy dla włączenia pinu 1 portu A ( wpisuje 1,2,3 do 8 )

    dla wyłączenia

    _2_off_h dla ustawienia godziny wyłączenia
    _2_off_m dla minut
    _2_off_s dla sekund
    _2_off_wy dla wyłączenia pinu 1 portu A ( wpisuje 1,2,3 do 8 )

    ****************************************************
    A ma być ich 8

    Teraz jak zrobić aby nie powtarzać kodu wyświetlania dla każdego z tych ustawień
    bo zżera ten zapis sporo pamięci, a 8 funkcji dla wyświetlenia każdej nastawy
    też nie rozwiązuje problemu

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 gru 2019, o 11:37 
    Offline
    Użytkownik

    Dołączył(a): 05 gru 2017
    Posty: 435
    Lokalizacja: Puck
    Pomógł: 7

    Po odpowiedziach widzę że nie ma innego sposobu aby
    wyświetlić ustawienia w jednej wspólnej
    funkcji do wyświetlania na LCD dla ośmiu nastawień ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 gru 2019, o 12:02 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    Możesz np tak:

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


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2019, o 03:03 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Obawiam się że więcej pamięci zeżre 60 zbędnych zmiennych ("_1_on_h" do "_1_off_wy" x 8), niż wyświetlanie.
    Ja bym na twoim miejscu zrobił z tego jedną funkcję dla ustawień czasów wł/wył.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2019, o 11:10 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    qwertownik napisał(a):
    a może tak bez odkrywania koła na nowo - funkcja sprintf?


    Możesz pokazać jakby to wyglądało docelowo w kodzie programu z użyciem sprintf?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2019, o 11:44 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    a nie można tak?

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

    na jedno wychodzi, ale ładniej wygląda bez ifów

    nie sprawdzałem, pisane na kolanie

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2019, o 12:21 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    Harry napisał(a):
    a nie można tak?

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

    na jedno wychodzi, ale ładniej wygląda bez ifów

    nie sprawdzałem, pisane na kolanie


    A ten sprintf doda zero wiodące z automatu? Chodzi mi o zera które autor postu sobie ifami ogarnął?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2019, o 12:24 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    tak, doda, drugi argument po procencie to minimalna długość, jeżeli byłoby tam np 5, a długość minut to 2, wtedy dodałby 3 zera.

    ------------------------ [ Dodano po: 27 minutach ]

    Czyli doda tyle zer(albo spacji), żeby uzupełnić liczbę wynikową do wymaganej długości.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2019, o 13:15 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    Harry napisał(a):
    tak, doda, drugi argument po procencie to minimalna długość, jeżeli byłoby tam np 5, a długość minut to 2, wtedy dodałby 3 zera.

    ------------------------ [ Dodano po: 27 minutach ]

    Czyli doda tyle zer(albo spacji), żeby uzupełnić liczbę wynikową do wymaganej długości.


    A no to git, fajne rozwiązanie



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 gru 2019, o 19:23 
    Offline
    Moderator
    Avatar użytkownika

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

    qwertownik napisał(a):
    zamiast jednej standardowej konstrukcji

    sprintf nie jest żadną "standardową linijką" ... to jest BARDZO Tłusta funkcja i w bardzo wielu przypadkach warto stosować jest prostsze własne implementacje - a nie zawsze sięgać po sprintf. Spróbuj jej użyć na ATtiny13 to sam się przekonasz w czym rzecz. W prockach z większą ilością pamięci flash i ram nie ma oczywiście problemu. No i ta uwaga nie dotyczy akurat forsowanego w tym wątku rozwiązania autora - bo rzeczywiście jego droga była jeszcze daleka od doskonałości - ale zawsze warto próbować. I warto mieć na uwadze - co niesie za sobą taka funkcja jak sprintf (jeśli chodzi o zużycie pamięci)

    _________________
    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: 5 gru 2019, o 19:27 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    mirekk36 napisał(a):
    to jest BARDZO Tłusta funkcja

    gorzej niż bardzo :/

    sprintf (s, "%d",
    12345)
    Flash bytes 1614 (1502)
    Stack bytes 58
    MCU clocks 1647

    Zastanawia mnie czy ilość argumentów/flag w tej funkcji ma jakieś znaczenie, jeśli chodzi o zajętość pamięci.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 gru 2019, o 04:05 
    Offline
    Moderator
    Avatar użytkownika

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

    qwertownik napisał(a):
    A skąd nagle wtrącenie z Attiny13?


    A no tak to - że bez żadnych wyjaśnień piszesz frywolnie ;)

    qwertownik napisał(a):
    podstawowe rozwiązanie - nie warto pisać takich funkcji "z ręki" - jak potem byś taki kod dał komuś innemu to ma do rozkminienia kilkanaście linijek zamiast jednej standardowej konstrukcji


    Teraz zaś wyjaśniasz to co już wyżej zostało wyjaśnione. Pomyśl czasem nieco wcześniej - zamiast pisać że to jakiś standard i nie ma co sięgać po inne rozwiązania - bo w tych dwóch wypowiedziach przeczysz sam sobie.

    qwertownik napisał(a):
    Jak to oczywiste, że na takich prockach zawsze trzeba kombinować - w co którymś wątku można zaraz napisać, że kod do niczego bo na Atiiny 13 trzeba robić inaczej.

    Dla ciebie oczywiste ale nie dla tych którzy stawiają pierwsze kroki w programowaniu procków - i o tym zapominasz.

    qwertownik napisał(a):
    w co którymś wątku można zaraz napisać, że kod do niczego bo na Atiiny 13 trzeba robić inaczej.

    Bzdury piszesz - bo chodziło o pokazanie realnego problemu początkujących i widać po tym twoim zdaniu, że małe masz doświadczenie w dydaktyce - a patrzysz tylko przez czubek własnego nosa i tego co ty akurat wiesz.

    qwertownik napisał(a):
    Potem ludziom wchodzą nawyki z odkrywaniem wiecznie koła na nowo i kilkanaście funkcji do wyświetlania różnych typów danych.

    Może ty miałeś z tym aż takie problemy - to nie oznacza, że inni będą powielać te błędy. Uwierz w ludzi ;) ... Każdy kiedyś zaczynał i gdy ma możliwość poznania różnych podstawowych rozwiązań to sam później łatwo dociera do coraz bardziej skomplikowanych i sam tworzy coraz lepsze kody źródłowe.

    _________________
    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: 6 gru 2019, o 20:51 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    Harry napisał(a):
    sprintf (s, "%d",
    12345)
    Flash bytes 1614 (1502)
    Stack bytes 58
    MCU clocks 1647


    To podsumowanie to z Atmel Studio zrobiłeś czy z jakiegoś profilera?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 gru 2019, o 21:02 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    To z dokumentacji toolchaina

    Wysłane ze srajfona

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 00:07 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    A już miałem nadzieję, że jakieś ciekawe narzędzie wynalazłeś :(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 00:20 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Jak się nauczę migać diodką przy pomocy timerów(albo czytać datasheety), to może wtedy wynajdę coś ciekawego :lol:
    Niestety na takim etapie jestem :oops:

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    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: 16 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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