如何解决 MemoryError:Micropython 的内存分配失败?
Posted
技术标签:
【中文标题】如何解决 MemoryError:Micropython 的内存分配失败?【英文标题】:How to resolve MemoryError: memory allocation failed with Micropython? 【发布时间】:2020-10-14 10:40:29 【问题描述】:我正在使用 pycom 的 SiPy 板进行项目,一切顺利,直到我实现了 2 个新文件(这不会修改项目行为本身),但在上传新文件并尝试运行我的代码后,它显示MemoryError: Memory allocation failed, allocating 136 bytes
。
我尝试使用os.fsformat("/flash")
清理电路板并再次上传项目,但我最终遇到了同样的错误。我还尝试解决“错误行”(只是导入另一个运行良好的类)并没有解决它,只是后来在另一个分配了不同字节的导入中发现了同样的错误。
【问题讨论】:
如何复制这种行为? 我检查了设备信息,尽管我有足够的闪存空间,但设备信息中的 RAM 或“内存状态”似乎已满,4MB/4MB,所以我猜任何带有已满 RAM 的板都会告诉同样的错误,我想知道如何清理 RAM 内存,因为它似乎是运行时的问题。 【参考方案1】:根据您使用的 micropython 端口,您可以考虑使用:
import micropython
micropython.alloc_emergency_exception_buf(100)
早在boot.py
文件中?
【讨论】:
【参考方案2】:如果您在目标设备上有足够的 RAM,您可能希望扩大 micropython
正在使用的堆大小。
查看micropython
的内存数据:
$ micropython
>>> import micropython
>>> micropython.mem_info()
mem: total=3818, current=728, peak=1592
stack: 464 out of 40000
GC: total: 1024512, used: 816, free: 1023696
No. of 1-blocks: 13, 2-blocks: 7, max blk sz: 8, max free sz: 63971
我的示例中的重要部分是free: 1023696
。例如,我可以在 2MB 堆内存可用的情况下运行 micropython
。为此,请使用以下选项:
$ micropython -X heapsize=2M
>>> import micropython
>>> micropython.mem_info()
mem: total=2620, current=542, peak=1406
stack: 464 out of 40000
GC: total: 2049088, used: 592, free: 2048496
No. of 1-blocks: 8, 2-blocks: 6, max blk sz: 8, max free sz: 128019
【讨论】:
以上是关于如何解决 MemoryError:Micropython 的内存分配失败?的主要内容,如果未能解决你的问题,请参考以下文章
如何克服 numpy.unique 的 MemoryError
记录pip install torchvision MemoryError
场景应用:Java 出现 Out Of MemoryError(OOM 错误)的原因有哪些?出现 OOM 错误后,怎么解决?
尝试使用 itertools.permutations 时出现 MemoryError,如何使用更少的内存?
如何在没有 MemoryError 的情况下将 183,223,040x4 矩阵重塑为 140 个尺寸为 1145x1145 的矩阵?