add multipart rom array's
This commit is contained in:
@@ -9,7 +9,7 @@ huffman = False
|
||||
TARGET=os.getcwd()
|
||||
SOURCE=sys.argv[1]
|
||||
|
||||
HUFFMAN_ENCODER="/Users/david/Devel/arch/avr/code/quickdev16/tools/huffman/huffman-encode"
|
||||
HUFFMAN_ENCODER="/Users/david/Devel/arch/avr/code/quickdev16/packages/huffman/huffman-encode"
|
||||
|
||||
data = open(SOURCE,"r").read()
|
||||
print "Load %s, %i bytes" % (SOURCE,len(data))
|
||||
@@ -27,6 +27,7 @@ if huffman == True:
|
||||
binfile.close()
|
||||
|
||||
cmd = "%s /tmp/loader.rle" % HUFFMAN_ENCODER
|
||||
print cmd
|
||||
os.system(cmd)
|
||||
data = open("/tmp/loader.rle.hfm","r").read()
|
||||
print "HUFFMAN crunch (%i) bytes" % (len(data))
|
||||
@@ -37,6 +38,13 @@ if huffman == True:
|
||||
cfile = open("/tmp/loader.c","w")
|
||||
hfile = open("/tmp/loader.h","w")
|
||||
|
||||
parts = []
|
||||
cnt = len(data) / ((2**15) -1 )
|
||||
r = len(data) - (cnt * ((2**15) -1))
|
||||
for i in range(0, cnt):
|
||||
parts.append(((2**15) -1 ))
|
||||
parts.append(r)
|
||||
|
||||
hfile.write('''/*
|
||||
File: %s
|
||||
Time: %s
|
||||
@@ -44,36 +52,68 @@ Time: %s
|
||||
#ifndef __FIFO_H__
|
||||
#define __FIFO_H__
|
||||
|
||||
#define ROM_BUFFER_SIZE %i
|
||||
#define ROM_HUFFMAN_SIZE %i
|
||||
#define ROM_RLE_SIZE %i
|
||||
#define ROM_BUFFER_CNT %i
|
||||
|
||||
#endif
|
||||
''' % (os.path.basename(SOURCE),time.strftime("%a, %d %b %Y %H:%M:%S",
|
||||
time.localtime()),len(data), huffman_size, rle_size))
|
||||
hfile.close()
|
||||
time.localtime()), huffman_size, rle_size,len(parts)))
|
||||
|
||||
|
||||
for idx,val in enumerate(parts):
|
||||
hfile.write('#define ROM_BUFFER_SIZE%02i %i\n' % (idx+1,val))
|
||||
|
||||
|
||||
hfile.write('\n#endif\n')
|
||||
hfile.close()
|
||||
cfile.write('''/*
|
||||
File: %s
|
||||
Time: %s
|
||||
*/
|
||||
#include <avr/pgmspace.h>
|
||||
#include <loader.h>
|
||||
|
||||
const char _rom[ROM_BUFFER_SIZE] PROGMEM = {
|
||||
''' % (os.path.basename(SOURCE),time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())))
|
||||
|
||||
for idx,c in enumerate(data):
|
||||
c = ord(c)
|
||||
if idx<len(data)-1:
|
||||
cfile.write("0x%02x," % c)
|
||||
else:
|
||||
cfile.write("0x%02x" % c)
|
||||
if idx and idx%16==0:
|
||||
cfile.write("\n")
|
||||
cfile.write('''
|
||||
};
|
||||
''')
|
||||
|
||||
|
||||
addr = 0
|
||||
for idx,val in enumerate(parts):
|
||||
cfile.write('''
|
||||
const char _rom%02i[ROM_BUFFER_SIZE%02i] PROGMEM = {
|
||||
''' % (idx+1,idx+1))
|
||||
l = addr
|
||||
h = addr + parts[idx]
|
||||
addr+= parts[idx]
|
||||
print l,h
|
||||
for idx,c in enumerate(data[l:h]):
|
||||
c = ord(c)
|
||||
if idx<len(data)-1:
|
||||
cfile.write("0x%02x," % c)
|
||||
else:
|
||||
cfile.write("0x%02x" % c)
|
||||
if idx and idx%16==0:
|
||||
cfile.write("\n")
|
||||
cfile.write('''
|
||||
};
|
||||
''')
|
||||
|
||||
cfile.write('PGM_VOID_P _rom[ROM_BUFFER_CNT]= {')
|
||||
for idx,val in enumerate(parts):
|
||||
if idx<len(parts)-1:
|
||||
cfile.write('''&_rom%02i,''' % (idx+1))
|
||||
else:
|
||||
cfile.write('''&_rom%02i''' % (idx+1))
|
||||
cfile.write('''};
|
||||
''')
|
||||
|
||||
cfile.write('const int _rom_size[ROM_BUFFER_CNT] = {')
|
||||
for idx,val in enumerate(parts):
|
||||
if idx<len(parts)-1:
|
||||
cfile.write('''%i,''' % (val))
|
||||
else:
|
||||
cfile.write('''%i''' % (val))
|
||||
cfile.write('''};
|
||||
''')
|
||||
|
||||
cfile.close()
|
||||
|
||||
shutil.copy("/tmp/loader.c", os.path.join(TARGET,"loader.c"))
|
||||
|
||||
Reference in New Issue
Block a user