sipeed/MaixPy-v1

MaixBit setting heap size with utils.gc_heap_size() no longer works

Lawrence-RedFern opened this issue · 1 comments

Describe the bug
I had been running a script on a machine which would identify an image. Without changing anything, the script starting reporting

MemoryError: Out of normal MicroPython Heap Memory! Please reduce the resolution of the image you are running this algorithm on to bypass this issue!

when trying to execute the line img = image.Image(sd_image_path).resize(224,224)

at the start of the script I have the line utils.gc_heap_size(1500000) to ensure there is space in the GC ram to resize the image. Previously I had no issue with this, and the images that I have been testing with have not increased in file size or resolution.

When running the lines after my call to utils.gc_heap_size(1500000)

print("kpu.memtest(): " + str(kpu.memtest()))
print("utils.heap_free(): " + str(utils.heap_free()))
print("utils.gc_heap_size(): " + str(utils.gc_heap_size()))
print("gc.mem_alloc(): " + str(gc.mem_alloc()))
print("gc.mem_free(): " + str(gc.mem_free()))

The board now prints out

###free gc heap memory : 478 KB
###free sys heap memory: 1876 KB
utils.heap_free(): 1921024
utils.gc_heap_size(): 524288
gc.mem_alloc(): 16896
gc.mem_free(): 501120

which shows that my call to utils.gc_heap_size(1500000) is not working.

If I run the exact same script on a healthy board, the same script returns what I'd expect which is

###free gc heap memory : 1418 KB
###free sys heap memory: 924 KB
utils.heap_free(): 946176
utils.gc_heap_size(): 1500000 <- what I expect
gc.mem_alloc(): 15904
gc.mem_free(): 1466592

I'm wondering if there is any solution to this bug? I've tried running the lines

gc.enable()
gc.collect()
machine.reset

and also deiniting the .kmodel I have been using a = kpu.deinit(task), all to no avail on the bugged board. The healthy board does not have any issues.

Please complete the following information

  • IDE version: [MaixPy IDE 0.2.5]
  • Firmware version: [maixpy_v0.6.2_84_g8fcd84a58_openmv_kmodel_v4_with_ide_support]
  • Board: [MaixBit]
  • OS: [Windows]

Using Kflash to erase the whole board has fixed the bugged board, it now returns

###free gc heap memory : 1418 KB
###free sys heap memory: 924 KB
kpu.memtest(): None
utils.heap_free(): 946176
utils.gc_heap_size(): 1500000
gc.mem_alloc(): 15904
gc.mem_free(): 1466592

but I would still like to know how this could have happened in the first place. If anyone has encountered this issue before please let me know :)