Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Keil - błąd *** ERROR L107: ADDRESS SPACE OVERFLOW

grasss 22 Sty 2007 01:06 1712 5
  • #1 22 Sty 2007 01:06
    grasss
    Poziom 11  

    A dokładniej wygląda to tak:

    Code:
    *** ERROR L107: ADDRESS SPACE OVERFLOW
    
        SPACE:   DATA   
        SEGMENT: ?DT?MAIN
        LENGTH:  002FH

    z tego co widze keil wywala mi ze mam przekroczoną pamięć DATA,
    zaczęło się to od pewno czasu jak mój kod zbliżył się do wielkości tak jak poniżej:
    Code:
    Program Size: data=105.4 xdata=0 code=6137
    
    creating hex file from "sterownik"...
    "sterownik" - 0 Error(s), 3 Warning(s).


    Po dopisaniu kilku linijek albo np. gdy dodam jakąś tablice z kilkoma zmiennymi (które się zmieniają np. odczyt z magistrali i2c) to data jest większa od 110 i koniec, kompilator staje.
    Co mogę uczynić żeby zmniejszyć Data,
    używam ADUC845 który ma 64k pamięci code, oraz czy w keil da się coś takiego rozwiązać - sprawa jest dość poważna ponieważ piszę teraz kod do mojego dyplomu a czasu coraz mniej.

    0 5
  • Pomocny post
    #2 22 Sty 2007 01:26
    markosik20
    Poziom 33  

    Włącz wewnetrzną pamięć ram. CFG845=1; i wszystkie zmienne umieść w przestrzeni xdata np:

    Code:
    char xdata dana;

    Masz przecież 2kB RAM'u. :)
    A najlepiej ustaw w kompilatorze żeby wszystkie zmienne automatycznie tam umieszczał.

    0
  • #3 22 Sty 2007 01:52
    grasss
    Poziom 11  

    Właśnie, mam 2kB ale nie wiem jak się do nich dostać :| , nie jestem jeszcze bardzo zaawansowanym programistą .

    Project -> Options for target -> i zakładka Target - to mogę zmienić model pamięci , ale nie wiem jak ustawić aby wszystkie zmienne automatycznie umieszczał w Ram.

    Znalazłem w aplikacji już rejestr CFG845 w SFR : 0xaf , dopisałem i ustawiłem XRAMEN=1, zostało jeszcze skonfigurować w keilu.

    0
  • Pomocny post
    #4 22 Sty 2007 08:20
    markosik20
    Poziom 33  

    Nie można ustawić samego XRAMEN bo rejestr CFG845 nie jest adresowalny bitowo i trzeba wpisać cały bajt CFG845=0x01;
    Żeby wszystkie zmienne były w xram trzeba ustawić w "Options Target" model Large: variables in XDATA.

    0
  • Pomocny post
    #5 22 Sty 2007 12:02
    zumek
    Poziom 39  

    grasss napisał:
    Właśnie, mam 2kB ale nie wiem jak się do nich dostać :| , nie jestem jeszcze bardzo zaawansowanym programistą .

    Poczytaj ten temat.

    Piotrek

    0
  • #6 22 Sty 2007 22:53
    grasss
    Poziom 11  

    To narazie odpukać, udało się z powodzeniem, dzięki wielkie za pomoc @markosik i @zumek .

    0