avr gcc i stos



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "kluchen" <kluchen_at_nospam_poczta.onet.pl>
Subject: avr gcc i stos
Date: Sat, 25 Jan 2003 16:23:04 +0100


Programuje AVRa w C korzystajac z avrgcc pracujacego w AVRStudio.
Pojawily sie problemy. Po ciezkich bolach zauwazylem, ze kompilator w ogole
nie dba o to, zeby w pamieci ram bylo miejsce na stos. Zadeklarowalem duze
bufory wykorzystujac w ten sposob prawie caly ram. Okazalo sie, ze program
podczas obslugi przerwan "najezdza" stosem na moje zmienne!!!

Jest jakas mozliwosc, zeby kompilator sprawdzal, czy w pamieci jest miejsce
na stos?

Bardzo trudno byloby mi recznie wyliczyc ile miejsca bedzie potrzebowal stos
w pesymistycznym przypadku (wywolania przerwan w "najgorszych" momentach).

kluchen



Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: avr gcc i stos
Date: Sat, 25 Jan 2003 16:46:38 +0100


Użytkownik "kluchen" <kluchen_at_nospam_poczta.onet.pl> napisał w wiadomości
news:b0ua3l$k2u$1_at_nospam_news.tpi.pl...
Programuje AVRa w C korzystajac z avrgcc pracujacego w AVRStudio.
Pojawily sie problemy. Po ciezkich bolach zauwazylem, ze kompilator w
ogole
nie dba o to, zeby w pamieci ram bylo miejsce na stos. Zadeklarowalem duze
bufory wykorzystujac w ten sposob prawie caly ram. Okazalo sie, ze program
podczas obslugi przerwan "najezdza" stosem na moje zmienne!!!
Jest jakas mozliwosc, zeby kompilator sprawdzal, czy w pamieci jest
miejsce
na stos?
Bardzo trudno byloby mi recznie wyliczyc ile miejsca bedzie potrzebowal
stos
w pesymistycznym przypadku (wywolania przerwan w "najgorszych" momentach).

Na początku każdej obsługi przerwania sprawdzać czy obszar na stos nie
zszedł poniżej założonej granicy bezpieczeństwa? IMHO większym problemem
będzie ustalenie strategii mówiącej co zrobić jeżeli stosu faktycznie
zabraknie. (Nie obsłużyć przerwania? Wykonać wariant uproszczony? Zablokować
pozostałe do czasu obsługi bieżącego? ;)

AFAIR to w Keilowskim RTX-51 Tiny był tego typu mechanizm kontroli stosu
wołany przy każdym przerwaniu od zegara systemowego (przełączaniu zadań). Po
przekroczeniu stosu można było np. zapalić LED-a i puścić program w martwą
pętlę. Wtedy było wiadomo ze zwis jest wynikiem przepełnienia stosu a nie
101 innych przyczyn.

MDz