avr-gcc pozbycie się stosu

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ł

Reply to
pawel
Loading thread data ...

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ęć.

Reply to
Bogdan G

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?

Reply to
Adam Dybkowski

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ł

Reply to
Pawel

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.

Reply to
Adam Dybkowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.