Skip to content

Commit 89c6ed9

Browse files
Merge pull request #36 from ThomasWaldmann/gc
call the garbage collector now and then
2 parents 365761c + 7f87c85 commit 89c6ed9

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

esp32_ulp/__main__.py

+4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import sys
22

3+
from .util import garbage_collect
4+
35
from .assemble import Assembler
46
from .link import make_binary
7+
garbage_collect('after import')
58

69

710
def src_to_binary(src):
811
assembler = Assembler()
912
assembler.assemble(src)
13+
garbage_collect('before symbols export')
1014
addrs_syms = assembler.symbols.export()
1115
for addr, sym in addrs_syms:
1216
print('%04d %s' % (addr, sym))

esp32_ulp/assemble.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from . import opcodes
66
from .nocomment import remove_comments
7+
from .util import garbage_collect
78

89
TEXT, DATA, BSS = 'text', 'data', 'bss'
910

@@ -139,8 +140,7 @@ def parse_line(self, line):
139140
return label, opcode, args
140141

141142

142-
def parse(self, text):
143-
lines = remove_comments(text)
143+
def parse(self, lines):
144144
parsed = [self.parse_line(line) for line in lines]
145145
return [p for p in parsed if p is not None]
146146

@@ -271,10 +271,13 @@ def assembler_pass(self, lines):
271271
raise Exception('Unknown opcode or directive: %s' % opcode)
272272
self.finalize_sections()
273273

274-
def assemble(self, lines):
274+
def assemble(self, text):
275+
lines = remove_comments(text)
275276
self.init(1) # pass 1 is only to get the symbol table right
276277
self.assembler_pass(lines)
277278
self.symbols.set_bases(self.compute_bases())
279+
garbage_collect('before pass2')
278280
self.init(2) # now we know all symbols and bases, do the real assembler pass, pass 2
279281
self.assembler_pass(lines)
282+
garbage_collect('after pass2')
280283

esp32_ulp/util.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
DEBUG = False
2+
3+
import gc
4+
5+
6+
def garbage_collect(msg, verbose=DEBUG):
7+
free_before = gc.mem_free()
8+
gc.collect()
9+
free_after = gc.mem_free()
10+
if verbose:
11+
print("%s: %d --gc--> %d bytes free" % (msg, free_before, free_after))

tests/assemble.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from esp32_ulp.assemble import Assembler, TEXT, DATA, BSS, REL, ABS
22
from esp32_ulp.assemble import SymbolTable
3+
from esp32_ulp.nocomment import remove_comments
34

45
src = """\
56
@@ -25,7 +26,8 @@ def test_parse_line():
2526

2627
def test_parse():
2728
a = Assembler()
28-
result = a.parse(src)
29+
lines = remove_comments(src)
30+
result = a.parse(lines)
2931
assert None not in result
3032

3133

0 commit comments

Comments
 (0)