和PC不一样的地方是,M5Stack毕竟是个单片机系统,其存储资源非常的有限,无论是ROM还是RAM。
对比一下我手上的M5Stack Fire和M5Stick-C。
M5Stack | M5Stick-C | |
ESP32 | 240MHz dual core, 600 DMIPS, 520KB SRAM, Wi-Fi, dual mode Bluetooth |
240MHz dual core, 600 DMIPS, 520KB SRAM, Wi-Fi, dual mode Bluetooth |
RAM | 520KB + 4MB PSRAM |
520KB |
ROM | 16MB | 4MB |
这个配置对于单片机系统来说,还是比较优秀的,但是相对于PC来说,没有可比性。如果用来跑Arduino/C语言的程序,倒是没什么问题,不过如果跑Python,RAM比较小的情况下,尤其需要小心。本来MicroPython系统本身就需要有比较大的RAM开销,再稍微开个大点的list或者做个list的复杂操作,可能RAM就不够用了。
那么,我们就需要能够方便的查看系统剩余存储空间,包括ROM和RAM。
参考 https://micropython.nxez.com/2019/02/24/view-the-remaining-flash-space-on-the-micropython-board.html
我查看了M5Stack Fire和StickC的ROM和RAM情况。
M5Stack Fire
查看ROM
>>> import ubinascii
>>> import os
>>> statvfs_fields = ['bsize','frsize','blocks','bfree','bavail','files','ffree',]
>>> info = dict(zip(statvfs_fields, os.statvfs('/flash')))
>>> info
{'files': 0, 'ffree': 0, 'bsize': 4096, 'bfree': 175, 'frsize': 4096, 'bavail': 175, 'blocks': 513}
>>> info['bsize'] * info['bfree']
716800
>>>
查看RAM
>>> import gc
>>> gc.mem_free()
7904
>>> gc.collect()
>>> gc.mem_free()
60464
>>>
M5Stick-C
查看ROM
>>> import ubinascii
>>> import os
>>> statvfs_fields = ['bsize','frsize','blocks','bfree','bavail','files','ffree',]
>>> info = dict(zip(statvfs_fields, os.statvfs('/flash')))
>>> info
{'files': 0, 'ffree': 0, 'bsize': 4096, 'bfree': 398, 'frsize': 4096, 'bavail': 398, 'blocks': 513}
>>> info['bsize'] * info['bfree']
1630208
>>>
查看RAM
>>> import gc
>>> gc.mem_free()
57968
>>> gc.collect()
>>> gc.mem_free()
78336
>>>
Fire的ROM空间为什么这么少? 比StickC还少? 没理由啊……
还有,Fire不是有4M的PSRAM吗?
[Update 20190622] 可能是原装UIFlow系统并不支持超过4M的ROM,也不支持PSRAM,所以可能需要自己编译MicroPython固件,以支持更大的ROM和RAM。 参考: https://blog.csdn.net/zhufu86/article/details/92190720