我正在使用Python在LCD显示器(Raspberry Pi)上显示位图图像。这很有效,但似乎我创造了一个巨大的内存泄漏。 这段代码似乎是罪魁祸首:
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
的内容永远不会被删除,但我的Python知识似乎太糟糕了,无法找到原因。
你能给我一个提示吗?非常感谢你。
答案 0 :(得分:0)
所以这就是我发现的:
py-spidev
模块(或spidev本身的某些部分)似乎是问题所在。 py-spidev
非常慢我现在已经摆脱py-spidev
并直接通过文件句柄写入/dev/spidev0.0
。不再过多的内存使用和SPI通信现在需要大约两秒钟,这大约是它之前所需时间的十分之一。