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

ADUC843 Keil: nieprawidłowe działanie programu po przejściu na XDATA i MEMORY MODEL LARGE

indrys 22 Maj 2007 20:27 1377 5
REKLAMA
  • #1 3911058
    indrys
    Poziom 11  
    Posty: 8
    Witam!
    Piszę program w kompilatorze Keil na ADUC843 i zaczyna mi brakować pamięci. Poczytałem więc dokumentację a także posty na elektrodzie odnośnie używania przestrzeni XDATA i niestety nie udało mi się zmusić programu do działania po zmianie bitu w starterze dołączanym przez Keil:
    XRAMEN EQU 1  ; 0 = Disable on-chip XDATA RAM
                       ; 1 = Enable  on-chip XDATA RAM

    oraz wybraniu opcij CODE ROM SIZE oraz MEMORY MODEL na LARGE.
    Program się kompiluje uruchamia ale jego działanie jest dalekie od prawidłowego. Dodam, iż po ponownym przejściu do MEMORY MODEL SMALL, wszystko zaczyna działać poprawnie. Progamu nie zamieszam gdyż jest dość rozbudowany, niemniej próbowałem na łatwiejszych przykładach i po wypełnieniu tablicy zadeklarowanej jako xdata, kolejnymi liczbami i wydrukowaniu na ekranie ujrzałem same zera.
    Proszę o pmoc.
  • REKLAMA
  • REKLAMA
  • #3 3913410
    indrys
    Poziom 11  
    Posty: 8
    Dzięki markosik. Faktycznie pomogło. Zastanawia mnie tylko jedna rzecz, dlaczego jeśli nie zadeklaruje jawnie żadnej zmiennej jako xdata a w pliku dołączanym przez Keil ustawię XRAM jako włączony, to po kompilacji uzyskuję iż w przestrzeni XDATA znajduje się 512 bajtów. Dodam, iż deklaracja zmiennych jako xdata powoduje wzrost tego obszaru o odpowiednią wartość.
  • REKLAMA
  • #4 3913547
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Keil musiał dostosować swój produkt do ADUC (ze względu na możliwość adresowania 16MB pamięci XRAM). Jeżeli dobrze "pogrzbać" jest cała dosyć skomplikowana instrukcja jak poustawiać opcje kompilatora,preprocesora i linkera żeby uzyskać porządany efekt. Najprosciej i najszybciej jest poprostu jawne zadeklarowanie zmiennych z informacją dla kompilatora gdzie one mają się znajdować.
  • REKLAMA
  • #5 3915570
    damig
    Poziom 11  
    Posty: 14
    Ocena: 1
    Markosik20:

    może znasz odpowiedź na moje pytanie z cytowanego przez Ciebie wątka:

    "Mam pytanie... jak użyć Startup Code czyli w wtym przypadku "Start_ad.a51"? Gdy dodaje ten plik do projektu do Source Group to program mi się ładnie kompiluje, ale po wgraniu do procka wszystko głupieje, tak jak gdyby na wejściach uC były podane zera.

    Program działa mi bez problemu, klawiszami zmieniam rózne parametry, włączam podświetlenie lcd, ale po dodaniu "Start_ad.a51" wszystko mruga i piszczy :] !

    Czegoś tu nie rozumiem pewnie...

    Chce użyć "Start_ad.a51" po to aby odpalić XRAM przy starcie uC (zgodnie z tym co zamieścił Zumek)."
  • #6 3915743
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Nie wystarczy dodać rozbiegówkę Start_ad.a51. Trzeba ją jeszcze skonfigurować. Cały opis jest w komentarzach kodu. Rozbiegówka służy do włączenia XRAM, ustawienia stosu i kasowania RAM'u zaraz po starcie uK a jak wiadomo w '51 jest DATA,IDATA oraz PDATA i XDATA które w dodatku są zewnętrzne lub wewnętrzne więc trzeba to dobrze wszystko poustawiać. :)
REKLAMA