logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom Atmega 2560: Błąd NO MORE SPACE FOR LABELS przy kompilacji programu

enterrupter 13 Mar 2014 20:04 1863 14
  • #1 13400564
    enterrupter
    Poziom 12  
    Witam,piszę program na Atmega 2560 podczas samego kompilowania programu wyskakuje taki błąd NO MORE SPACE FOR LABELS,najprawdopodobniej od przepełnienia etykiety w której jest aż 18001 linii pisanego programu,pamięć zajętego programu na Atmedze pokazuje 50 procent,czy jest jakaś możliwość aby ten błąd zniknął żeby dopisać jeszcze kilka linii?

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #2 13404209
    dioda1000
    Poziom 28  
    Spróbuj takiej składni.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #3 13404394
    enterrupter
    Poziom 12  
    w wersji AND też próbowałem niestety nie działa mi poprawnie sam program,wpisując AND do całego programu zwiększyła mi się pamięć kompilowanego programu z 50
    procent na 52 dlatego zostałem przy If.......Then

    zmniejszyłem pamięć kompilowanego programu do 39 procent wycinając locate 1,12 i lcd " " teraz wygląda tak


    Kod: text
    Zaloguj się, aby zobaczyć kod


    ale dalej mam przepełnienie etykiety

    etykieta to adres we flashu czy idzie to jakoś zwiększyć żeby pisać więcej w etykietach ?
  • #4 13409906
    rrytel
    Poziom 14  
    Parę uwag co do stylu pisania- Stosuj wcięcia, wtedy łatwiej się połapać który End if jest od którego ifa. I spróbuj pogrupować warunki z miesięcy i dni. procek ci podziękuje większą wydajnością:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Ale nie znam bascoma, więc sprawdź czy wszystko dobrze, ale chyba widać o co mi chodzi, chociaż dla takiej ilości warunków wg. mnie przydało by się wykorzystać instrukcję podobną do switch-case z C.
  • #5 13410266
    enterrupter
    Poziom 12  
    pogrupowanie nie ma wpływu na ilość pamięci w mikroprocesorze, jest to jedynie pomocne przy analizie kodu, nie zmienia się ani nie zwiększ ilość pamięci przy kompilacji,etykieta jest dalej przepełniona.
  • #6 13410444
    zumek
    Poziom 39  
    enterrupter napisał:
    ... w której jest aż 18001 linii pisanego programu...

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Czy ja dobrze rozumiem, że powtórzyłeś 365 powyższy fragment kodu, zmieniając tylko miesiąc, dzień, godzinę i minutę :?: 8-O
    No i może napisz co to jest za urządzenie.
  • #7 13410456
    rrytel
    Poziom 14  
    To może kompilator sobie sam grupuje, ale warto to stosować choćby ze względu na czytelność kodu.
    ewentualnie można spróbować opisać te warunki za pomocą jakiś funkcji np.
    masz podobne warunki dla pierwszych 3 dni, czy dla pozostałych dni jest taka sama zależność? Jeśli tak to trzeba znaleźć sposób na obliczenie dnia roku i minuty dnia.:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Wtedy zamiast 365 warunków masz 1. Jeśli się da to można spróbować w tą stronę. Na pewno oszczędzi to czas twojego pisania i czas obliczeń dla mikrokontrolera.
  • #8 13411846
    enterrupter
    Poziom 12  
    jest to program pisany do zegara astronomicznego,każdy dzień ma inny czas załączania przekaźnika względem wschodu i zachodu słońca a także uwarunkowany jest czas zmiany czasu letniego na zimowy i odwrotnie,akurat ta etykieta zawiera największą zawartość programu i wywala mi błąd
  • #9 13412070
    zumek
    Poziom 39  
    enterrupter napisał:
    ...akurat ta etykieta zawiera największą zawartość programu i wywala mi błąd

    Jeżeli cały Twój kod wygląda tak jak podprogram "czasy", to niepotrzebnie się napracowałeś. Podprogram realizujący taką funkcję jak Twój podprogram "czasy", może zajmować kilkanaście(no może kilkadziesiąt) linii kodu i dwie-trzy tablice, a nie jak u Ciebie taka za przeproszeniem 'kobyła' :|
    Jeżeli Twoje urządzenie ma tylko załączać i wyłączać przekaźnik o odpowiedniej porze, to do tego wystarczy jakaś M-ósemka.
    Jeśli możesz , to spakuj i załącz cały projekt, albo chociaż podprogram "czasy", a potem zobaczymy co dalej. Uważam, że zajętość pamięci programu, można skrócić kilkudziesięciokrotnie :D
  • #10 13412248
    Fredy
    Poziom 27  
    Jeżeli ten czas ma się zmieniać liniowo, codziennie o tą samą wartość, to przecież możesz wyprowadzić sobie wzór na obliczanie tego czasu. Po co mielić tyle razy to samo. Możesz też użyć tablicy, albo zrobić to w pętli.
  • Pomocny post
    #12 13418073
    zumek
    Poziom 39  
    Wprawdzie ... to nie humanitarnie z mojej strony dawać niemalże gotowca ... :D
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #13 13421832
    enterrupter
    Poziom 12  
    Wielkie dzięki teraz popróbuję z załączeniem przekaźnika,miałbym jeszcze jedno pytanie,mam jeszcze jeden podprogram który miałby cofnąć zegarek do tyłu każdego roku w październiku niestety cofając z godziny trzeciej na drugą już cały czas tak się cofa czyli dojdzie do 3 i wskakuje na 2,jak zrobić żeby szedł dalej czyli po przejściu z godziny 3 na drugą już dalej się nie cofał
  • #14 13421916
    zumek
    Poziom 39  
    enterrupter napisał:
    ...miałbym jeszcze jedno pytanie,mam jeszcze jeden podprogram który miałby cofnąć zegarek do tyłu każdego roku w październiku niestety cofając z godziny trzeciej na drugą już cały czas tak się cofa czyli dojdzie do 3 i wskakuje na 2,jak zrobić żeby szedł dalej czyli po przejściu z godziny 3 na drugą już dalej się nie cofał


    Zastosuj flagę.

    jeżeli trzeba zmienić czas na zimowy i flaga=letni to
          flaga=zimowy
          czas=czas_zimowy
    koniec warunku
    
  • #15 13422714
    enterrupter
    Poziom 12  
    zumek mam prośbę, czy możesz wytłumaczyć mi tę część kodu:

    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA