Niestety prawa arytmetyki binarnej są nieubłagane. W celu uzyskania 84600 unikalnych kombinacji bitów trzeba użyć minimum 17 bitów i żadne sztuczki tu nie pomogą. Jako że mikrokontroler i jego pamięci wewnętrzne operują ośmiobitowymi bajtami, trzeba użyć minimum 3 bajty, czyli 24 bity, tracąc po 7 bitów (prawie 30%) na jedną zmienną. Jednym ze sposobów na zaoszczędzenie miejsca w pamięci jest wykorzystanie niewykorzystanych bitów jednej zmiennej do zapamiętania fragmentu kolejnej zmiennej. Oczywiście jest to wykonalne, ale nieco komplikuje kod związany z zapisem i odczytem (jego napisanie i przetestowanie wymaga więcej czasu, a dodatkowo zwiększa ryzyko wystąpienia błędów) oraz wydłuża czas dostępu do takich zmiennych (przed zapisem jak i po odczycie danych z pamięci bity trzeba odpowiednio wypozycjonować). Nie wiem, czy przy obecnych cenach mikrokontrolerów warto się z tym bawić (zamiast użyć uc z odpowiednią pojemnością pamięci). Trzeba by było to sobie dokładnie przekalkulować biorąc pod uwagę wszystkie plusy i minusy, uwzględniając oczywiście rozmiar serii, bo nawet mały zysk jednostkowy przy dużej ilości może okazać się opłacalny.
grzeniu 73 napisał(a):
Jedak można zapisać sobie jakaś zmienna dodatkowa i w niej ustawiać jeden bit żeby zaznaczyć rano czy popołudniu. Przy takim podejściu można zaoszczędzić,bo zliczamy tylko do 12:00 prawie polowe eeproma i w miarę prosty zapis, odczyt.
To też jest jakieś wyjście, zakładając że w tej dodatkowej zmiennej będziesz miał spakowane bity AM/PM z kilku zmiennych, jednak podobnie jak napisałem wyżej, skomplikuje to nieco kod zapisu/odczytu, bo będziesz musiał odczytać/zapisać najpierw 12-godzinną zmienną, po czym znaleźć i odczytać/zapisać odpowiedni bit z odpowiedniego bajtu zawierającego bity określające AM/PM. Czyli również oszczędność pojemności kosztem komplikacji kodu i czasu dostępu do zmiennych, choć może dla Ciebie to rozwiązanie będzie czytelniejsze.
grzeniu 73 napisał(a):
W przeciwnym wypadku można zapisać po prostu trzy zmienne byte z H,M,S
... nadal jednak korzystasz tylko z 17 bitów (5 bitów godziny, 6 bitów minuty i 6 bitów sekundy) zużywając 24 bity w pamięci, chociaż przy okazji upraszcza to zapis i odczyt. Chyba najprostsze byłoby użycie 32-bitowego typu podstawowego (w 8bit AVR jest to typ
long), jednak tu marnotrawstwo pamięci wyniesie ok. 47%.
Podsumowując moim zdaniem
najbardziej optymalnie będzie jednak zapisywać to za pomocą trzech bajtów: godziny minuty i sekundy, a w razie potrzeby zmienić mikrokontroler na taki z większą pojemnością EEPROM (maksymalna dostępna w 8bit AVR to chyba 4096 bajtów, czyli 1024 zmiennych
long).