avr-gcc pozbycie się stosu

Sep 05, 2008 4 Replies

Witam. Chciałbym mieć większą pewność że stos nie nadpisze mi danych. Czy deklarując zmienne jako globalne, i wszystkie zmienne w funkcjach jako static spowoduję że stos będzie mniej wykorzystywany? Oczywiście nie licząc funkcji bibliotecznych.


Pozdrawiam Paweł



Stos bedzie mniej wykorzystywany - to prawda. Jednak bedzie mniej miejsca na niego. Przykład - w jednej procedurze potrzebujesz lokalnie zmienną dwubajtową. W drugiej również. Jeśli obie zrobisz static wówczas nie bedą zajmowały miejsca na stosie, ale razem zajmą 4 bajty miejsca, o które skróci sie miejsce na stos. Czyli w przypadku jeśli nie są one razem wywyoływane zwiekszasz prawdopodobieństwo nadpisania danych przez stos. Możesz ocywiście te dane umieścic w jednym miejscu pamieci - jednej zmiennej ale zmniejsza to czytelność programu. Lepiej jest jednak dawać, gdzie się da zmienne lokalne, a w trakcie testowania sprawdzić głębokość wnikania stosu w pamięć.

pawel pisze:

A nie lepiej obliczać szczytową zajętość stosu (np. wcześniej wypełnić cały obszar stosu stałą wartością a potem sprawdzać, gdzie najniżej się zaczyna) przez dłuższy czas i ew. dodatkowo sprawdzać na przykład co sekundę, czy nie przekroczono zadanej głębokośći?

Ciekawy pomysł. W którym momencie najlepiej wypełnić ten stos. Może na początku funkcji main? Czy w którejś z sekcji init..? Pozdrawiam Paweł

Pawel pisze:

Najlepiej zanim w ogóle stos jest do czegoś użyty - czyli AFAIR w sekcji .init2

W main też oczywiście możesz tylko wtedy wypełnij jedynie obszar od początku stosu do SP.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required