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



Teraz jest 7 gru 2019, o 04:39


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: 229
Lokalizacja: Puck
Pomógł: 5

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 ]
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: 229
Lokalizacja: Puck
Pomógł: 5

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: 908
Pomógł: 62

Możesz np tak:

Składnia: [ Pobierz ] [ Ukryj ]
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: 718
Pomógł: 31

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: 908
Pomógł: 62

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: 718
Pomógł: 31

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: 908
Pomógł: 62

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: 718
Pomógł: 31

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: 908
Pomógł: 62

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: 24891
Lokalizacja: Szczecin
Pomógł: 930

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: 718
Pomógł: 31

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: wczoraj, o 04:05 
Offline
Moderator
Avatar użytkownika

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

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: wczoraj, o 20:51 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1932
Pomógł: 90

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: wczoraj, o 21:02 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 718
Pomógł: 31

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: dzisiaj, o 00:07 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1932
Pomógł: 90

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



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

Dołączył(a): 14 sie 2016
Posty: 718
Pomógł: 31

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 4 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