Michał
Guest
Sat May 10, 2008 2:25 pm
Witam wszystkich
Mam takie pytanie odnośnie programowania w C AVRów. Jak można sprawdzić ile
już wykorzystałem SRAMu mikrokontrolera w programie? Mam dość złożony
program i wykorzystuje w nim zmienne typu PROGMEM (zapisywane tylko w
pamięci programu). Nie wykorzystuje zmiennych dynamicznych. Gdyby nie
PROGMEM to chyba dało by się to odczytać z HEXa wygenerowanego przez
kompilator (skok do początku programu), ale tu już tak prosto chyba nie
będzie.
Może któraś informacja z kompilatora informuje ile zużyłem ramu?
section size addr
..data 1394 8388864
..text 39616 0
..bss 918 8390258
..stab 2388 0
..stabstr 185 0
..debug_aranges 160 0
..debug_pubnames 11656 0
..debug_info 34262 0
..debug_abbrev 3324 0
..debug_line 21440 0
..debug_frame 1312 0
..debug_str 8771 0
..debug_loc 13441 0
..debug_ranges 1088 0
Total 139955
..text informuje o wielkości całego programu. Na oko to może .data odnosi się
do RAM, ale gdybanie mnie nie bardzo uszczęśliwia. Jak Wy to sprawdzacie?
Może jakimś programem/symulatorem AVR?
Pozdrawiam
DJ
Guest
Sat May 10, 2008 6:24 pm
On 2008-05-10 15:25:17 +0200, =?iso-8859-2?Q?Micha=B3?= <sdfsdf@wp.pl> said:
Quote:
Witam wszystkich
Mam takie pytanie odnośnie programowania w C AVRów. Jak można sprawdzić
ile już wykorzystałem SRAMu mikrokontrolera w programie?
Jedna sprawa - ile Ty wykorzystałeś na zmiene, a druga sprawa jak
urośnie stos. O ile ta pierwsza jest znana, to stos już zależy silnie
od rutime... Symulatorem można to badać, choć 100% pewnego wyniku może
to nie dać. Były też inne sprawdzone metody - zapełnić RAM znaną
wartością, i sprawdzać ile zostanie nadpisane podczas pracy programu w
kostce AVR.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
Michał
Guest
Sun May 11, 2008 2:06 pm
Quote:
Jedna sprawa - ile Ty wykorzystałeś na zmiene, a druga sprawa jak
urośnie stos. O ile ta pierwsza jest znana, to stos już zależy silnie od
rutime... Symulatorem można to badać, choć 100% pewnego wyniku może to nie
dać. Były też inne sprawdzone metody - zapełnić RAM znaną wartością, i
sprawdzać ile zostanie nadpisane podczas pracy programu w kostce AVR.
O stos mi nie chodzi. Wiem że to jest zmienne i tym się teraz nie martwię.
Chodzi mi o to ile pamięci na stałe wykorzystałem. W programie unikam
zmiennych lokalnych i wysyłania parametrów funkcji, dlatego stos nie urośnie
zbyt duży. Jak bym wiedział że np. wykorzystałem 3500B z 4000B to spał bym
spokojnie, bo na stos zostaje sporo miejsca.
Pozdrawiam
DJ
Guest
Sun May 11, 2008 10:40 pm
On 2008-05-11 15:06:50 +0200, =?iso-8859-2?Q?Micha=B3?= <sdfsdf@wp.pl> said:
Quote:
O stos mi nie chodzi. Wiem że to jest zmienne i tym się teraz nie martwię.
Ale jednak powinieneś...
Quote:
Chodzi mi o to ile pamięci na stałe wykorzystałem.
..data
i więcej poczytasz na:
http://www.nongnu.org/avr-libc/user-manual/mem_sections.html
Quote:
W programie unikam zmiennych lokalnych
nie oznacza to że kompiler nie użyje rejestrów kiedy będzie
potrzebował. Patrzyłeś jak zostaje skompilowany kod? polecam naprawdę.
Quote:
i wysyłania parametrów funkcji, dlatego stos nie urośnie zbyt duży.
Przyjrzyj się dokładniej.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
Elektrolot
Guest
Wed May 14, 2008 8:51 am
Michał pisze:
Quote:
Witam wszystkich
Mam takie pytanie odnośnie programowania w C AVRów. Jak można sprawdzić
ile już wykorzystałem SRAMu mikrokontrolera w programie?
data + bss
pozdrawiam
Elektrolot
__Maciek
Guest
Sat May 17, 2008 6:17 am
Sat, 10 May 2008 15:25:17 +0200 Michał <sdfsdf@wp.pl> napisał:
Quote:
.text informuje o wielkości całego programu. Na oko to może .data odnosi się
do RAM, ale gdybanie mnie nie bardzo uszczęśliwia. Jak Wy to sprawdzacie?
Może jakimś programem/symulatorem AVR?
AVR Studio wyświetla to po kompilacji. Podaje nawet ile to procent
dostępnego RAMu, to samo dla FLASHa.
Np.:
"
Program: 5154 bytes (3.9% Full)
(.text + .data + .bootloader)
Data: 1372 bytes (33.5% Full)
(.data + .bss + .noinit)
"
Oczywiście, jak już ktoś napisał, trzeba też wziąć pod uwagę stos.
Niestety ze względu na skromną pamięć RAM w AVRach, trzeba trzymać
stałe stringi (np. komunikaty, polecenia dla różnych modułów) we
flashu (wyłącznie) i ładować je w razie potrzeby funkcjami typu
strcpy_P. Ech, gdyby tak architektura Von Neumanna...
--
RUN"
Press PLAY then any key:
Loading WINDOWS block 45829
read error b
Adam Dybkowski
Guest
Sun May 18, 2008 1:21 am
__Maciek pisze:
Quote:
Niestety ze względu na skromną pamięć RAM w AVRach, trzeba trzymać
stałe stringi (np. komunikaty, polecenia dla różnych modułów) we
flashu (wyłącznie) i ładować je w razie potrzeby funkcjami typu
strcpy_P. Ech, gdyby tak architektura Von Neumanna...
Przełącz się na ARMa. Polecam.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.