Compilation-speed sucks less now.

Compilation-speed sucks less now.
tl;dr: Arduino 1.6.X is much slower to build many projects than the old versions of the Arduino IDE, but @Daniel_Garcia has now checked in some work-arounds to make it less slow. See github, FastLED3.1 branch, as usual.

Slightly longer and rather irate explanation: If you’ve moved to Arduino 1.6.X, you’ve probably also noticed that compilation speed for your projects suddenly started to suck. Anyway, @Daniel_Garcia and I have now put 20+ hours into trying to figure out WTF they’ve screwed up now, and if there’s any way we can work around it.

The short explanation for this is that new version of gcc (the compiler inside the Arduino IDE) is much, much slower for some things than the old version, especially mixed-C+±plus-assembly-language code, like the superfast WS2811/WS2812B “Neopixel” driver for AVR chips in FastLED. Oh the painful, painful irony: the new Arduino IDE compiles the superfast FastLED code super slowly.

Anyway, I don’t really want to get into the agonizing details any deeper, because of how much time we’ve already burned on this, but the bottom line is that latest FastLED 3.1 branch has code changes that attempt to work around the worst of the Arduino 1.6.X/gcc 4.8.1 slowdowns. Based on stopwatch tests on four different computers, I’d say that our new code builds 2X or 3X than it did yesterday. It’s not so much “better” as it is “less bad” And it’s all the fault of gcc 4.8.1, as found in Arduino 1.6.X.

Anyway, we’re pretty tired of working on this one stupid thing, and don’t really want to talk about it any more, but glad that it’s faster again now. If you’re happy that we’ve found some work-arounds, just click +1, and we’ll get the message. OK, that’s all. Thanks.

You want the code from 9:30PM Eastern time (nine minutes ago relative to this comment), not the earlier commits. If in doubt, just grab the latest now.

That’s unrewarding, harsh work to be doing. Yeah, there comes the punchline: “We’re pretty tired of working on this one stupid thing, and don’t really want to talk about it anymore.” I really wish dev’s could be freer to go there, to put those feelings on the line. So thanks for the enormously hard, unrewarding work, thanks for checking in, and thanks for giving us some feels for how you are right now: all really good, hip hip hurrah for you all!!!

I’m currently reading ‘The Soul of a New Machine’, and there’s some very harsh debugging going on in there.

Actually, you want the code from now - because as a result of me doing another pass at dealing with this code and cleaning up the asm output, WS2812 output for FastLED on 16Mhz AVRs has zero overhead between rgb pixels when writing data out. As in ZERO clocks, as in you look at a scope output of writing all 0s and you can’t tell where the pixel boundaries are without counting peaks.

After seeing that slowdown in 1.6.X I switched back to 1.0.5. Is there a very good reason to go to 1.6? :slight_smile:

Same as @Thomas_Runge , I have been working with 1.0.6 IDE and FastLED 3.1 and find it works well enough.

Is it worth getting IDE 1.6.5 at this time ?

The main reason to move to 1.6.5 is because in the interest of maintaining my own sanity it is the only version I’m going to be testing against going forward (and attempting to follow upgrades as closely as possible).

This is GREAT. Mainly because I am such a hack coder and have an even harder time visualizing what my code will do. Therefore I end up developing code on a trial and error basis… lots of compiling!