当使用我编译的 MicroPython v1.17-59-g782d5b2e5-dirty 在 PICO 上运行程序时,我看到了相同的结果。程序运行,打印几个垃圾字符并在相同的值附近停止。我使用 mpconfigport.h 中设置的 #define MICROPY_PY_BUILTINS_STR_OP_MODULO (0) 重新编译了 MicroPython,以禁用内置的十六进制。
现在运行程序会导致:
Unhandled exception in thread started by <function myThread at 0x20009810>
Traceback (most recent call last):
File "test.py", line 8, in myThread
MemoryError: memory allocation failed, allocating 0 bytes
第 8 行是 print(hex(count)) 行。hex 方法为其返回的新字符串对象分配一些内存,MicroPython 不会在线程中进行自动垃圾回收。
如果您在内存不足之前将程序修改为 gc.collect(),则程序将运行而不会停止
import gc
import _thread
def myThread():
count = 0
while True:
count = count + 1
print(hex(count))
if (count % 1000 == 0):
gc.collect()
_thread.start_new_thread(myThread, ())