ATNEL tech-forum
https://forum.atnel.pl/

Jak wyświetlaś wartości z wielu zmiennych
https://forum.atnel.pl/topic22703.html
Strona 1 z 1

Autor:  miki53 [ 2 gru 2019, o 19:08 ]
Tytuł:  Jak wyświetlaś wartości z wielu zmiennych

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.

Autor:  miki53 [ 3 gru 2019, o 11:37 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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ń ?

Autor:  Jarecki [ 3 gru 2019, o 12:02 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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:  Harry [ 4 gru 2019, o 03:03 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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ł.

Autor:  Jarecki [ 4 gru 2019, o 11:10 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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?

Autor:  Harry [ 4 gru 2019, o 11:44 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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

Autor:  Jarecki [ 4 gru 2019, o 12:21 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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ął?

Autor:  Harry [ 4 gru 2019, o 12:24 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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.

Autor:  Jarecki [ 4 gru 2019, o 13:15 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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

Autor:  mirekk36 [ 5 gru 2019, o 19:23 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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)

Autor:  Harry [ 5 gru 2019, o 19:27 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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.

Autor:  mirekk36 [ 6 gru 2019, o 04:05 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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.

Autor:  micky [ 6 gru 2019, o 20:51 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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?

Autor:  Harry [ 6 gru 2019, o 21:02 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

To z dokumentacji toolchaina

Wysłane ze srajfona

Autor:  micky [ 7 gru 2019, o 00:07 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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

Autor:  Harry [ 7 gru 2019, o 00:20 ]
Tytuł:  Re: Jak wyświetlaś wartości z wielu zmiennych

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:

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/