0,0 → 1,51 |
#!/usr/bin/python |
# ====================================================================== |
# check.py - Check section sizes and other constraints |
# |
# Copyright (C) 2006 Dick Streefland |
# |
# This is free software, licensed under the terms of the GNU General |
# Public License as published by the Free Software Foundation. |
# ====================================================================== |
|
import os, sys |
|
stacksize = 32 |
flashsize = 2048 |
ramsize = 128 |
|
if len(sys.argv) > 2: |
stacksize = int(sys.argv[2]) |
if len(sys.argv) > 3: |
flashsize = int(sys.argv[3]) |
if len(sys.argv) > 4: |
ramsize = int(sys.argv[4]) |
|
max_sram = ramsize - stacksize |
|
for line in os.popen('avr-objdump -ht ' + sys.argv[1]).readlines(): |
a = line.split() |
if len(a) == 7: |
if a[1] == '.text': |
text = int(a[2], 16) |
if a[1] == '.data': |
data = int(a[2], 16) |
if a[1] == '.bss': |
bss = int(a[2], 16) |
if len(a) == 5 and a[4] == 'crc4tab': |
crc4tab = int(a[0], 16) |
print 'text: %d, data: %d, bss: %d' % (text, data, bss) |
|
status = 0 |
overflow = text + data - flashsize |
if overflow > 0: |
print 'ERROR: Flash size limit exceeded by %d bytes.' % overflow |
status = 1 |
overflow = bss + data - max_sram |
if overflow > 0: |
print 'ERROR: SRAM size limit exceeded by %d bytes.' % overflow |
status = 1 |
if (crc4tab & 0xff) > 0xf0: |
print 'ERROR: The table crc4tab should not cross a page boundary.' |
status = 1 |
sys.exit(status) |