I'm not absolutely sure about 500 usecs. It's some time ago, and I tested a lot of different options, at least it was remarkable.
It is compiled with release=1, absolutely sure, since I got same hint from wilberforce. And this brought up 15% of speed.
Tested the uint8Array in a lot of different cases. There is no general behaviour. Sometimes it is close to array, sometimes its slower. So, looks like a problem with ESP32
Looks like your assumption of jsvIterateCallback is correct. After switching to that in my test, time goes up to 22msec.
I did a lot of testing with a lot of different sources, don't remember each of them in detail.
Very often, one change caused another one. Therefore its hard to assign effects to one special change. Its fighting for msecs.
One major point, why I like the bytePort class, is the option to have a default solution for all boards, and still the option to use the strength of other boards.
In your approach, setting pins with a register limits other solutions. In case of ESP32, I2S supports parallel mode, which would be a really fast solution. And it could open the world for more colors.
At the end, the question is "support as much boards as possible with same technology" or "support use of strength for special boards, even if this a kind of restricting your boards"
To be open, if I would be looking from your perspective, I would not know what's the better solution.
© Espruino, powered by microcosm.
Report a problem