eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAVR gcc .bss .heap i stos › Re: AVR gcc .bss .heap i stos
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Nijak <b...@b...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: AVR gcc .bss .heap i stos
    Followup-To: pl.misc.elektronika
    Date: Thu, 21 Jun 2012 15:42:02 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 70
    Message-ID: <jrv8c3$d7r$1@inews.gazeta.pl>
    References: <jrugou$75s$1@node2.news.atman.pl>
    NNTP-Posting-Host: 217.153.153.214
    Mime-Version: 1.0
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: 8Bit
    X-Trace: inews.gazeta.pl 1340286147 13563 217.153.153.214 (21 Jun 2012 13:42:27 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Thu, 21 Jun 2012 13:42:27 +0000 (UTC)
    X-User: cepu69
    User-Agent: KNode/4.4.10
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:633212
    [ ukryj nagłówki ]

    Profesor wrote:

    > Czy jakieś nieświadome użycie, zadeklarowanie zmiennej lokalnej np. float
    > w funkcji może prowadzić do używania obszaru poniżej stosu i powyżej .bss
    > czyli heap?
    1. Przydzielenie jakiegos obszaru pamięci na stos nie oznacza iż
    przekroczenia jego rozmiaru nie nastapi (chyba, że w prologu wywoływanej
    funkcji jest kontrolowana granica stosu).
    2. Typowa sytuacja dla embedded : wywoływanie funkcji rekurencyjnie
    szybko spowoduje przekroczenie stosu. Alokowanie agregatów na stosie, np.
    tablic lub głebokie drzewo wywołań funkcji (odkładanie kontekstu na stosie)
    spowoduje przekroczenie stosu.
    3. Kompilator sie nie myli. Wszystkie zmienne statyczne znajdą sie w
    odpowienich sekcjach tj. .bbs lub .data a automatyczne na stosie. Przyczyna
    opisywanego powyżej stanu rzeczy jest zwykle przekroczenie stosu (patrz
    punkt 2), "urwany" wskażnik itp.
    (...)


    > No ale stos mi nachodzi czasem na zmienne. Jak zmniejszę bufor[512] o
    > kilkadziesiąt to się uspokaja.
    Nie wiem jak w Twoim przypadku ale widziałem taka implementacje :
    adres stosu był przypisany w skrypcie lnikera do końca pamięci i obszar
    między końsem bss-ów a końcem RAM był stosem. I tu nastepował wielkie
    ździwienie iz program sie wywraca a po zmniejszeniu jakis tablic działa.
    Przecież mniejszy rozmiar na dane to wiekszy stos.

    > Co można zrobić ?
    Oszacować niezbedny rozmiar stosu, np. tak (przykład dla
    architektury ARM) :

    // A minimal, optimized stack frame, rounded up - no autos
    #define CYGNUM_HAL_STACK_FRAME_SIZE (4 * 20)

    // Stack needed for a context switch: this is implicit in the estimate for
    // interrupts so not explicitly used below:
    #define CYGNUM_HAL_STACK_CONTEXT_SIZE (4 * 20)

    // Interrupt + call to ISR, interrupt_end() and the DSR
    #define CYGNUM_HAL_STACK_INTERRUPT_SIZE \
    ((4 * 20) + 2 * CYGNUM_HAL_STACK_FRAME_SIZE)

    // Space for the maximum number of nested interrupts, plus room to call
    functions
    #define CYGNUM_HAL_MAX_INTERRUPT_NESTING 4

    #define CYGNUM_HAL_STACK_SIZE_MINIMUM \
    (CYGNUM_HAL_MAX_INTERRUPT_NESTING * CYGNUM_HAL_STACK_INTERRUPT_SIZE
    + \
    2 * CYGNUM_HAL_STACK_FRAME_SIZE)

    #define CYGNUM_HAL_STACK_SIZE_TYPICAL \
    (CYGNUM_HAL_STACK_SIZE_MINIMUM + \
    16 * CYGNUM_HAL_STACK_FRAME_SIZE)

    > Skąd wiadomo czy heap jest używany?
    Należy expicite wywołać funkcje typu *alloc() lub impicite
    przez uzycie bibliteki wymagającej dynamicznej alokacji pamięci.

    > I co się dzieje w tym obszarze?
    Alokator rezerwuje porcje pamięci i zwraca wskaźnik do niej.

    > Wstawiam pułapki w różne miejsca kodu i czytam ile wynosi aktualnie SP i
    nie ma siły, nie spotykają się. A jednak się kwasi.
    Nie tak. Stos oraz obszar ponizej (jesli nic tam nie ma) nalezy zainicjować
    wzorcem typu 0xaa55aa55 a nastepnie sprawdzić czy rzeczony wzorzec nie
    został całkowicie zamazany zmiennymi - podczas normalnej pracy odkładane
    zmienne NIGDY nie powinny przekroczyc dolnej granicy stosu.


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: