RTV forum PL | NewsGroups PL

Zaskakujący wzrost zajętości pamięci RAM w projekcie AVR z globalnymi zmiennymi volatile?

avr-gcc zajetosc ram/data - dziwne zachowanie

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Zaskakujący wzrost zajętości pamięci RAM w projekcie AVR z globalnymi zmiennymi volatile?

BartekK
Guest

Fri Apr 13, 2007 10:15 pm   



Nie wiem, czy ja cos zle robie...
Mam program (dosc prosty w dzialaniu) ktory operuje w zasadzie na kilku
zmiennych tylko (razem moze z 30bajtow powinny zajmowac), ktore sa
definiowane globalnie jako "volatile static", bym mogl do tych samych
zmiennych dostawac sie z programu glownego, z przerwan i z wewnatrz
funkcji (ktore sa typu void funkcja(void) a wewnatrz operuja na
zmiennych globalnych)
Jedna z nich jest tablica, dokladnie to "volatile static int16_t
tablica[rozmiar]". Gdy podaje rozmiar np 1 - mam zajetosc data ~200
bajtow. Gdy definiuje rozmiar 2, zajetosc skacze do ~219bajtow. Przy
rozmiarze 64 (czyli teoretycznie 128bajtow tablicy) juz mam data >1300
bajtow, co niestety na atmega16 nie jest zbyt optymistyczne.
W funkcjach/obslugach przerwan uzywam jeszcze paru zmiennych
"tymczasowych" definiowanych lokalnie wewnatrz funkcji, ale probowalem
(poniewaz nie ma grozby ze rownoczesnie 2 funkcje taka zmienna
zmodyfikuja) przeniesc je jako globalne volatile static i tez nie
pomoglo...

Na projekt skladaja sie pliki:
main.c
uart.c
lcd.c
eprom.c
oraz pliki naglowkowe:
main.h (inkludowany w kazdym .c)
uart.h, lcd.h, eprom.h (inkludowane z odpowiednich .c)

W pliku main.h definiuje wszystkie zmienne "globalne", bym mial do nich
dostep np z funkcji zyjacej wewnatrz eprom.c. Probowalem robic tak:
#ifndef _ZMIENNE_
#define _ZMIENNE_
volatile static uint8_t zmienna;
#else
extern volatile static uint8_t zmienna;
#endif
by wielokrotnie (z okazji wielokrotnego inkludowania main.h) nie
definiowac tych samych zmiennych, ale nic to nie zmienilo...

Moze wogole zle do tego podchodze? moze sztuka pisania w c mi nie
wychodzi ;)

--

| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338173

Piotrek Sz.
Guest

Sat Apr 14, 2007 6:40 am   



BartekK <sibi@NOSPAMdrut.org> napisał(a):

Quote:
Nie wiem, czy ja cos zle robie...
...
Ty chyba nie bardzo rozumiesz , co oznacza static Sad

Zmienne zadeklarowane jako static , są "widziane" tylko w module , w którym
zostały zadeklarowane.Krótko mówiąc , zmienna volatile static typ x w module
main.c , nie jest tą samą zmienną volatile static typ x , której używa moduł
uart.c itd.To sa odrębne zmienne - pomimo takiej samej nazwy i zajmują odrębny
obszar w RAM-ie.Dlatego też , jeśli zwiększasz rozmiar zmiennej static w pliku
main.h o np. 1 bajt , to zajętość pamięci operacyjnej zwiększa się o tyle
bajtów , w ilu modułach tę zmienną zadeklarowałeś.Jeśli chodzi o "extern
volatile static zmienna" - bezsensowne Sad
Jeśli chcesz , by każdy moduł Twojego projektu miał "dostęp" do zmiennej , a
kompilator jej nie optymalizował , to zadeklaruj zmienną globalną jako
volatile jednym module , a w innych używaj jej jako extern.

Pozdrawiam
Piotrek



--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

BartekK
Guest

Sat Apr 14, 2007 10:59 am   



Piotrek Sz. napisał(a):
Quote:
Nie wiem, czy ja cos zle robie...
Jeśli chcesz , by każdy moduł Twojego projektu miał "dostęp" do zmiennej , a
kompilator jej nie optymalizował , to zadeklaruj zmienną globalną jako
volatile jednym module , a w innych używaj jej jako extern.
Dzieki, tak tez podejrzewalem:)

Zmienilem miejsce definiowania zmiennych globalnych (poczatek main.c),
wyrzucilem to static i juz jest ok.

--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338173

elektroda NewsGroups Forum Index - Elektronika Polska - Zaskakujący wzrost zajętości pamięci RAM w projekcie AVR z globalnymi zmiennymi volatile?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map