From d63b287c851ab6bae7b9912ba20a4b33612958f9 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Fri, 20 Aug 2021 21:33:15 +1000 Subject: [PATCH] drivers/neopixel: Optimize fill() for speed. This makes fill() about 7x faster (PYBV11 and PYBD_SF6) for the cost of +40 bytes of bytecode (or 120 bytes text). Signed-off-by: Jim Mussared --- drivers/neopixel/neopixel.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/neopixel/neopixel.py b/drivers/neopixel/neopixel.py index 9ed5155c72..d83b51ebb4 100644 --- a/drivers/neopixel/neopixel.py +++ b/drivers/neopixel/neopixel.py @@ -37,8 +37,11 @@ class NeoPixel: return tuple(self.buf[offset + self.ORDER[i]] for i in range(self.bpp)) def fill(self, color): - for i in range(self.n): - self[i] = color + for i in range(self.bpp): + c = color[i] + b = self.buf + for j in range(self.ORDER[i], len(self.buf), self.bpp): + b[j] = c def write(self): bitstream(self.pin, _BITSTREAM_TYPE_HIGH_LOW, self.timing, self.buf)