我使用Python在LCD显示器(Raspberry )上显示位图图像。这是很好的工作,但似乎我创造了一个巨大的内存泄漏。这段代码似乎是罪魁祸首:
def displayBitmap(self):
spi.open(0,0)
f = open("data/565.bmp", "rb")
imgdata = f.read()
f.close()
self.setAddress(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1)
k = 0
for i in range(0, (LCD_WIDTH*LCD_HEIGHT)):
dt = (ord(imgdata[k]) | (ord(imgdata[k+1]) << 8))
self.spiOutData(dt,2)
k +=2
imgdata = None
spi.close()..。
def spiOutData(self, data, bytes=1):
io.digitalWrite(15, io.LOW)
io.digitalWrite(16, io.HIGH)
io.digitalWrite(self.dcPin, io.HIGH)
if (bytes == 1):
spi.xfer2([(data)])
else:
spi.xfer2([(data>>8)])
spi.xfer2([(data)])它在一段时间内运行良好,但在某一时刻由于内存不足而终止。我的猜测是,imgdata的内容从未被删除,但我的知识似乎太糟糕了,无法找到原因。你能给我个提示吗?非常感谢。
发布于 2014-02-03 20:14:16
以下是我的发现:
py-spidev模块(或者spidev本身的某些部分)似乎是问题所在。py-spidev速度非常慢。现在我已经摆脱了py-spidev,并通过文件句柄直接写入/dev/spidev0.0。现在不再需要过多的内存使用和SPI通信,大约需要2秒,大约是之前所需时间的十分之一。
https://stackoverflow.com/questions/21524477
复制相似问题