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

Atmega128 + BASCOM: Znikające fonty przy 60% zajętości flash - co robić?

sundayman 08 Lip 2012 14:59 1238 5
REKLAMA
  • #1 11084021
    sundayman
    Poziom 26  
    Mam program, w którym używam kilku własnych fontów (dołączonych normalnie przez $include).

    Bascom w czasie kompilacji informuje, że program zajmuje ok. 60% flash.
    Ale - pisząc program, doszedłem do momentu, gdzie dodanie kilku linijek programu
    powoduje, że moje fonty zaczynają się "sypać" - dokładnie ostatni znak ostatniego dołączonego fontu.

    Przy czym wszystko jedno, gdzie dodam te linie programu (nie muszą zostać wykonane) - tak, jakby po prostu zaczęło brakować miejsca na program.
    Ale - kompilacja daje mi info o 60% zajętości. Czy to możliwe ?
  • REKLAMA
  • #2 11084314
    piotrva
    VIP Zasłużony dla elektroda
    A problemem nie jest przypadkiem nie tyle pamięć flash (bo tu BASCOM nie powinien dopuścić do nadpisania jakichś sektorów FLASH'a) co pamięć RAM? Czy przypadkiem stos i inne funkcje nie kolidują ze zmiennymi globalnymi i dlatego wszystko się sypie, bo nadpisuje się RAM?
  • REKLAMA
  • Pomocny post
    #3 11084551
    Mundi1970
    Poziom 24  
    Atmega128 posiada 128KB pamięci flash, żeby program poprawnie odczytał dane fontów rejestr RAMPZ musi być odpowiednio ustawiony. Może problemem jest umiejscowienie tych fontów we flashu, zaczynają się na pierwszej stronie pamięci (pierwsze 64 KB), a kończą na drugiej stronie (powyżej 64KB). Program odczytuje początek fontów z odpowiednio ustawionym RAMPZ, ale po minięciu pierwszych 64KB nie ustawia poprawnie RAMPZ i dane są odczytywane z pierwszego obszaru.
  • REKLAMA
  • #4 11084596
    sundayman
    Poziom 26  
    To co pisze Mundi mogłoby mieć sens. Korzystam z tej procedury do wyświetlania tekstu ( http://evertdekker.com/Joomla/index.php?option=com_content&task=view&id=49&Itemid=8 ).

    Rzeczywiście, może teraz być tak, że te fonty zaczynają się pod koniec pierwszego 64KB. Ale jak nad tym zapanować w Bascomie ?

    ______________________________

    Zrobiłem tak, że wstawiłem $Include na początku programu, i chyba jest OK.
    Dziękuję Mundiemu za naprowadzenie :)
  • REKLAMA
  • #5 11085176
    Mundi1970
    Poziom 24  
    sundayman napisał:
    Rzeczywiście, może teraz być tak, że te fonty zaczynają się pod koniec pierwszego 64KB. Ale jak nad tym zapanować w Bascomie ?


    Dopisz na początku programu dyrektywę $MAP, po kompilacji z raportu dowiesz pod jaki adresem zapisane są dane fontów.

    Zrobiłem mały test, spreparowałem dane tak żeby zaczynały się przed adresem 0x7FFF, a kończyły powyżej 0x7FFF (jedna komórka pamięci flash to 2 bajty :)). Do odczytu danych użyłem Restore i Read, w symulatorze działanie programu było błędne, ale wgrany do Atmegi1280 działał już poprawnie. Kompilowałem najnowszą wersją 2.0.7.4.

    Code map
    --------------------------------------------------------------------------------
    Line               Address(hex)        File
    --------------------------------------------------------------------------------
     1                 0                    0 C:\Users\Tomek\Desktop\BASCOM-work\testy\testRAMPZ.bas
     16                99
     18                9F
     19                A9
     20                B2
     21                BC
     23                C4
     25                CA
     26                D4
     27                DD
     28                E7
     30                EF
     35                F1
     38                7FF4
     39                8003
  • #6 11086866
    sundayman
    Poziom 26  
    Zgadza się, fonty rzeczywiście były "na przełomie".
    Być może ta procedura, z której korzystam nie potrafi tego poprawnie odczytać (nie mam czasu, żeby ją analizować teraz).
    Ale, przeniesienie tych danych na początek programu (oczywiście musiałem to "ominąć" przez skok do dalszej części programu najwyraźniej rozwiązało problem.

    Fizycznie u mnie to chodzi na Atmedze 128A.
REKLAMA