mirror of
https://github.com/travisgoodspeed/goodwatch
synced 2024-11-21 15:48:02 +00:00
Quick python script to print the sizes of the text and data sections.
This commit is contained in:
parent
b49d912fb6
commit
8dd1bcff4a
43
bin/printsizes.py
Executable file
43
bin/printsizes.py
Executable file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/python2
|
||||
|
||||
## Quick little pyelftools script to test the size of a CC430F6137
|
||||
## firmware image, warning the user if it looks too big.
|
||||
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
|
||||
|
||||
from elftools.elf.elffile import ELFFile
|
||||
from elftools.elf.sections import SymbolTableSection
|
||||
|
||||
|
||||
def process_file(filename):
|
||||
with open(filename, 'rb') as f:
|
||||
printsizes(f)
|
||||
|
||||
|
||||
def printsizes(stream):
|
||||
elffile = ELFFile(stream);
|
||||
|
||||
text=elffile.get_section_by_name('.text');
|
||||
textlen=len(text.data());
|
||||
codeperc=textlen*100.0/32768;
|
||||
print("%d bytes of .text (%d %%)" % (textlen,codeperc));
|
||||
if codeperc>80:
|
||||
print("WARNING: %d percent of code is used!"%codeperc);
|
||||
|
||||
|
||||
data=elffile.get_section_by_name('.data');
|
||||
datalen=len(data.data());
|
||||
bss=elffile.get_section_by_name('.bss');
|
||||
bsslen=len(bss.data());
|
||||
dataperc=(datalen+bsslen)*100.0/8192;
|
||||
print("%d bytes of .data, %d bytes of .bss (%d %%)"
|
||||
%(datalen,bsslen,dataperc));
|
||||
if dataperc>80:
|
||||
print("WARNING: %d percent of code is used!"%codeperc);
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
for filename in sys.argv[1:]:
|
||||
process_file(filename)
|
@ -15,6 +15,8 @@ gittag.h:
|
||||
echo "#define GITTAG" 0x`git describe --always` >gittag.h
|
||||
goodwatch: $(modules) $(apps) *.h
|
||||
$(CC) -o goodwatch $(modules) $(apps)
|
||||
../bin/printsizes.py goodwatch || echo "Please install python-pyelftools."
|
||||
|
||||
goodwatch.hex: goodwatch
|
||||
msp430-objcopy -O ihex goodwatch goodwatch.hex
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user