Raport 1423, funkcja, której użyłeś stwierdza, ze wolnego ram 1422. Czy to nie daje do myślenia?
Ponadto, w raporcie nie ma info o zużyciu stosu,bo tego kompilator nie wie. Min zużycie RAM dla stosu (przerwania),to:
2 bajty adresu powrotu (dla uC ponad 128k FLASH 3 bajty)
1 bajt rejestru statusu (dla ponad 128k dodatkowo RAMPZ)
2 rejestry R0 i R1
To daje już 5 bajtów. W praktyce, w przerwaniu jest zapamiętywane kilka do kilkunastu rejestrów, można śmiało przyjąć ok 10.
Do tego dochodzi sterta - wiesz co to jest? Czym się różni od stosu?
No i przerwania mogą być (prawie) wielopoziomowe, wtedy zapotrzebowanie na stos się zwiększa.
Funkcję, którą użyłeś, możesz sobie wsadzić w .... gdzie chcesz, ale nie do programu, aby stwierdził jakie jest zużycie RAM. Owszem, program ten pokaże ile RAM w danym momencie masz do dyspozycji, ale zarezerwuj taki RAM, zapisuj tam cały czas cokolwiek a program się zawiesi, bo zniszczysz stos a być może i stertę.
Funkcja, która ja udostępniłem, sprawdza jak dużo ram jest zajmowane przez stos i stertę (a może tylko stos, nie pamiętam). O ile biblioteki (sprawdzałeś?) nie allokują dynamicznie ram, to te 1,4k jest ok. 200 bajtów by też wystarczyło a nawet i 20, wszystko zależy od programu.
Jeśli więc nie chcesz analizować kodu, uruchom moja funkcję, ona "prawdę ci powie".
[EDIT}
Sprawdziłem tą moją funkcję, sprawdza zużycie stosu. Jeśli stera będzie używana, to zwróci 0 ram. Jeśli chcesz sprawdzać zużycie sterty, trzeba by szukać nie bajtu $FF tylko bloku (np 16 bajtów) o wartości $FF albo lepiej w sekcji "init3" wypełnić jakim konkretnym wzorem, np tekstem, i szukac tego tekstu(od dołu) i jego braku (od góry) RAM.
Te wszystkie programy, nie sa potrzebna jak się używa debugera, niestety, zabawkowe Arduino, nie wie co to sprzętowy debuger, dlatego nie używam tej zabawki, bo na wiele ona się nie nadaje.
Ponadto, w raporcie nie ma info o zużyciu stosu,bo tego kompilator nie wie. Min zużycie RAM dla stosu (przerwania),to:
2 bajty adresu powrotu (dla uC ponad 128k FLASH 3 bajty)
1 bajt rejestru statusu (dla ponad 128k dodatkowo RAMPZ)
2 rejestry R0 i R1
To daje już 5 bajtów. W praktyce, w przerwaniu jest zapamiętywane kilka do kilkunastu rejestrów, można śmiało przyjąć ok 10.
Do tego dochodzi sterta - wiesz co to jest? Czym się różni od stosu?
No i przerwania mogą być (prawie) wielopoziomowe, wtedy zapotrzebowanie na stos się zwiększa.
Funkcję, którą użyłeś, możesz sobie wsadzić w .... gdzie chcesz, ale nie do programu, aby stwierdził jakie jest zużycie RAM. Owszem, program ten pokaże ile RAM w danym momencie masz do dyspozycji, ale zarezerwuj taki RAM, zapisuj tam cały czas cokolwiek a program się zawiesi, bo zniszczysz stos a być może i stertę.
Funkcja, która ja udostępniłem, sprawdza jak dużo ram jest zajmowane przez stos i stertę (a może tylko stos, nie pamiętam). O ile biblioteki (sprawdzałeś?) nie allokują dynamicznie ram, to te 1,4k jest ok. 200 bajtów by też wystarczyło a nawet i 20, wszystko zależy od programu.
Jeśli więc nie chcesz analizować kodu, uruchom moja funkcję, ona "prawdę ci powie".
[EDIT}
Sprawdziłem tą moją funkcję, sprawdza zużycie stosu. Jeśli stera będzie używana, to zwróci 0 ram. Jeśli chcesz sprawdzać zużycie sterty, trzeba by szukać nie bajtu $FF tylko bloku (np 16 bajtów) o wartości $FF albo lepiej w sekcji "init3" wypełnić jakim konkretnym wzorem, np tekstem, i szukac tego tekstu(od dołu) i jego braku (od góry) RAM.
Te wszystkie programy, nie sa potrzebna jak się używa debugera, niestety, zabawkowe Arduino, nie wie co to sprzętowy debuger, dlatego nie używam tej zabawki, bo na wiele ona się nie nadaje.