Skocz do zawartości

Pomocna odpowiedź

Napisano

Pisząc program na Atmege8A skończyło mi się miejsce w pamięci FLASH. postanowiłem więc zdecydowałem że użyje drugiego procka (najprawdopodobniej Attiny25) jako układ "slave" który będzie realizował jakieś dodatkowe podrzędne zadanie.

Następnie pojawiła się chęć wprowadzenia polskich znaków do LCD.

Problem w tym ,że Atmega (układ master) nie ma już miejsca nawet na zdefiniowanie znaków - być może udało by mi się jeszcze wcisnąć ich odczyt bo zostało mi mniej niż 2%.

Wpadłem na pomysł żeby to Attinny25 po włączeniu wyświetlacza wprowadziła potrzebne znaki w Lcd ,a w Atmedze bym się do nich już tylko odwoływał. Czy to mogło by zadziałać?

Posiadasz wyświetlacz graficzny czy alfanumeryczny ???

Jeśli ten drugi to BASCOM ma opcje zdefiniowania kilku znaków niestandardowych...

A pamięć EEPROM ATMegi 8, wątpię ze ja zużyłeś całą. nadaje się tak samo dobrze jak FLASH.

W 512B EEPROMa, można niby zapisać tylko 8 znaków dla wyświetlacza alfanumerycznego, ale jak zastosować by (prostą) kompresję danych to nieco więcej :->

W 512B EEPROMa, można niby zapisać tylko 8 znaków dla wyświetlacza alfanumerycznego, ale jak zastosować by (prostą) kompresję danych to nieco więcej

Że niby jak? Przecież znaki mają rozmiar bodajże 7x6 pikseli, więc bez kompresji mamy 6B na znak - więc można zapisać 85 kształtów.

Wiem jak zdefiniować znaki w normalnym przypadku (wyświetlacz mam tekstowy) ale mi chodzi o to że nie mam już miejsca we FLASHU.

Co do EEPROMA pomysł jest ciekawy. Mógłbyś to bardzie rozwinąć? Do tej pory w EEPROMIE zapisywałem jedynie zmienne tablicowe.

Może jakiś fragment kodu.

Jeśli o ilość chodzi to 7 znaków mi potrzeba tylko naprawdę nie wiem jak je wepchać w 2% z 8kb FLASHA ale EEPROMA mam całego wolnego.

Zastanów się może nad optymalizacją kodu. Jeżeli masz zbędne includy (niektóre mogą oszukać kompilator i mimo nie używania zwiększyć rozmiar kodu), czy niepotrzebnie nie używasz dzielenie albo zmiennych zmiennoprzecinkowych, czy nie masz powtarzających się kawałków kodu, które można wpisać jako funkcja (oraz w drugą stronę, czyli funkcje użyte raz, które mogą być zadeklarowane jako inline).

7 znaków to 42B (o ile używasz wyświetlacza na HD44780 lub podobnego), naprawdę nie masz tyle miejsca?

Pisząc program na Atmege8A skończyło mi się miejsce w pamięci FLASH.

Jaką optymalizację masz włączoną?

Gdzie mam sprawdzić jaką optymalizacje mam włączoną?

Poza tym przeglądałem kod już parę razy i naprawdę skróciłem go już na tyle ile potrafię. Zastosowałem wszelkie "sztuczki" ,które znam. Mój program składa się głownie z podprogramów - odwołuje się do nich z różnych miejsc.

Kompilator pokazuje mi że zostało 2% a więc coś około 163,84 Kb.

Nie mam miejsca nawet żeby zadeklarować te znaki.

Myślę że inicjalizacja tych znaków jest trochę bardziej złożona niż samo zapamiętanie poszczególnych bajtów dlatego mi się nie mieści.

mam napisane obok że programuje w bascomie więc używam BASCOM-AVR

Mój program używa jednego Timera do odmierzania sekundy. W programie głównym (w pętli Do..Loop) mam jakieś pierdółki typu np. obsługa przycisków itp. Gdyby mi się udało pzrenieść zawartość programu głównego w przerwaniu co sekundę , to mógłbym zastosować polecenie NOSAVE przy timerze i dało by mi to dużo wolnego miejsca. Niestety wówczas program sprawdzał by stan przycisków tylko co sekundę więc musiałbym przyśpieszyć wywoływanie przerwania a do inkrementacji sekund użyć jakiejś przeładowującej się zmiennej pomocniczej.

mam napisane obok że programuje w bascomie więc używam BASCOM-AVR

OK, nie popatrzyłem. W takim razie nie pomogę bo BASCOM mnie nie lubi:)

Jeżeli zapełniłeś cały flash Atmega8 i optymalizacje masz włączoną prawidłowo, to czas na zmianę języka na C.

Jesteś genialny!!! 🤯 Z 98% spadło do 87% przy 8kb (tak duży spadek tylko dowodzi jak małe mam jeszcze doświadczenie w pisaniu programów 🤣 ).

Tylko teraz pytanie czy jakieś błędy w programie nie powstaną?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...