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

Problem z tablicami 2D w uVision3

11 Wrz 2007 18:57 1164 11
  • Poziom 24  
    Witam, w uVision3 zadeklarowałem tablice 2D:
    Code:
    int X[200][20];

    I jako test zapisuje do 1,1 liczbę 1:
    Code:
    X[1][1] = 1;

    uVision jednak wywala mi błąd, że:
    Cytat:
    BIBLIOTEKI.axf: error: L6047U: The code in this image is 3512 bytes - this version of the linker will not create images that large


    W czym problem? Zła deklaracja? Bez tablicy program ma podobną objętość i się normalnie kompiluje i tworzy...
  • VIP Zasłużony dla elektroda
    A może najpierw zacznij od czegoś małego np. 2x2 ;)
  • Poziom 24  
    No niby zadziałało ... ale ja mam potrzebę na tablicę o takich wymiarach... Jak mam to rozwiązać? Kilka mniejszych tablic? Ale musiał bym mieć pewność, że w RAM będą dokładnie po sobie ...

    AT91SAM7S256

    Dla pewności spytam czy INT to 32b zmienna?
  • Poziom 19  
    Deklaracja poprawna, ale tablica ogromiasta :) Zajmuje chyba 8000 bajtów a RAM, jeszcze zależy jaki mikrokontroler - właśnie, jaki ?
    Osobiście nie pracuję na uVision i nie spotkałem się z takim błędem, bardziej tak sobie spekuluję, niż udzielam konkretnej porady. Dziwi mnie, że linker pisze o kodzie (pamięci programu?), gdy tablica taka powinna pochłonąć RAM (ale wszystko zależy też od typu mikrokontrolera).
    Może ktoś odpowie Ci wprost o co chodzi. Ja proponuję sprawdzić, czy problem zależy od objętości tablicy i ewentualnie od jakiej wartości się zaczyna - może taki test będzie pouczający.
  • VIP Zasłużony dla elektroda
    Hmm zadeklarowałeś tablicę z 4000 komórkami, nie podałeś gdzie (choć tego nie mogę być pewny) i może dlatego kompilator się "burzy". Procesor jest 32bitowy więc domyślnie Int powinien tyle wynosić ;).
  • Poziom 24  
    Może podam dane tak ... bo mam problemy z przeliczeniem ich czy są poprawne ...

    Ustawienia automatyczne w uVision:
    ROM:
    -addr = 0x100000
    -size = 0x40000

    RAM:
    -addr = 0x200000
    -size = 0x10000

    Czy może program dzieli RAM na RAM i ROM ... przez co nie mogę uzyskać 16k SRAM'u?
  • Poziom 19  
    No właśnie, ARM, więc int powinien być 32-bitowy, czyli chcesz zająć 16000 bajtów. Pamięci RAM masz na tyle, jak patrzyłem na dokumentację mikrokontrolera i zajmuje ona ciągły obszar - więc fizycznie powinno dać rady. RAM i ROM są w ARM'ach w jednej przestrzeni adresowej, pewnie dlatego linker narzeka na objętość "kodu". Może problem wynika z ustawień linkera lub, tak jak dosłownie pisze, z jego "wersji".
  • Poziom 24  
    No to co mam zrobić? Od niedawna siedzę na ARM i zaabieram się do pierwszego porządniejszego projektu ... to najnowsza wersja uVision :/
  • Poziom 19  
    Cytat:
    to najnowsza wersja uVision :/

    A na pewno nie jakaś demowa? Biorąc dosłownie błąd linkera, tak by wynikało. Rozmiar kodu, podany w komunikacie jest dużo mniejszy, niż ustawienia z konfiguracji.
    Z drugiej strony zmiana rozmiaru tablicy nie powinna zmieniać wielkości kodu jako takiego, a chyba o nim mowa, bo zapisana wartość nie pomieściłaby Twojej tablicy. Może jednak rozmiar kodu zmienia się nieznacznie, w związku np. z kodem adresowania tablicy, czy coś takiego.
    Sprawdź, czy błąd nie powstaje przy przekraczaniu jakiejś "magicznej" objętości kodu programu.
  • Poziom 24  
    Udało mi się zadeklarować tablice [144][20] maksymalnie...

    uVision3 wersja chyba 3.53 z ograniczeniem kodu do 16k ... ale było napisane, że do 16k programu. A zmienne chyba się nie zaliczają do programu nie? Program ładuje się do flash, a nie w RAM ... Chyba, że ... linker i kompilator ma do 16k programu i danych :/ To będę miał problem ... pomoże ktoś rozwiązać problem z tą wersją pa PW?
  • Poziom 18  
    W ramie trzymaną są także inne zmienne, stos.w kodzie używasz jeszcze innych zmiennych oprócz tej tablicy??
  • Poziom 30  
    Witam, może mi ktoś powiedzieć jak zacząc pisac w uVision3 ? znam asemblera, c++, więc z samym C nie powinno być problemów. Pytam o same poczatki, zazwyczaj w C++ pisałem w Visual Studio 2005, także całkowitym laikiem nie jestem.