MemoryError:内存分配失败

问题描述 投票:0回答:1

我正在尝试使用 Raspberry Pi Pico 在 1306 OLED 上循环播放 GIF:

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf
import time

WIDTH = 128
HEIGHT = 64

i2c = I2C(0, scl = Pin(1), sda = Pin(0), freq=400000)
display = SSD1306_I2C(WIDTH, HEIGHT, i2c)

images = []
for n in range(1, 28):
    with open('/TEMP/image%s.pbm' % n, 'rb') as f:  #open folder and image
        f.readline() # Magic number
        f.readline() # Creator comment
        f.readline() # Dimensions
        data = bytearra  y(f.read())
    fbuf = framebuf.FrameBuffer(data, 64, 64, framebuf.MONO_HLSB) #adjust accordingly the width and height
    images.append(fbuf)

while True:
    for i in images:
        display.blit(i, 32, 0)
        display.show()
        time.sleep(0.01)

错误:

Traceback (most recent call last):
  File "<stdin>", line 19, in <module>
MemoryError: memory allocation failed, allocating 5000 bytes

还有:

>>> import micropython
>>> micropython.mem_info()
stack: 556 out of 7936
GC: total: 166016, used: 11120, free: 154896
 No. of 1-blocks: 158, 2-blocks: 36, max blk sz: 64, max free sz: 9614
i2c micropython raspberry-pi-pico
1个回答
0
投票

您的设备没有足够的内存来将所有图像填充到 RAM 中。阅读每张图像并将其一一显示在屏幕上

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf
import time

WIDTH = 128
HEIGHT = 64

i2c = I2C(0, scl = Pin(1), sda = Pin(0), freq=400000)
display = SSD1306_I2C(WIDTH, HEIGHT, i2c)


images = []
while True:
    for n in range(1, 28):
        with open('/TEMP/image%s.pbm' % n, 'rb') as f:  #open folder and image
            f.readline() # Magic number
            f.readline() # Creator comment
            f.readline() # Dimensions
            data = bytearray(f.read())     # there was space, probably typo posting your question
        fbuf = framebuf.FrameBuffer(data, 64, 64, framebuf.MONO_HLSB) #adjust accordingly the width and height
        display.blit(fbuf, 32, 0)
        display.show()
        time.sleep(0.01)
© www.soinside.com 2019 - 2024. All rights reserved.