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 ;)