ESP8266 core 3.0 und FastLED

Hallo
vor ein paar Tagen gab es in einem Beitrag die Information das es Probleme mit der Core 3.0 und FastLED geben würde.

Ich hab das heute mal probiert.
ESP 8266 Ver. Core 3.02
FastLED Ver.3.4.0 by Daniel Gracia

es gibt zwar jede Menge Warnungen ich habe jedoch mehrere Beispiele der Lib getestet, aber alle liefen.

Gruß Heinz

C:\Users\hbaum\Documents\Arduino\libraries\FastLED\src/fastpin.h:61:37: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   61 |  inline void hi(register port_ptr_t port) __attribute__ ((always_inline)) { *port |= mPinMask; }
      |                                     ^~~~
C:\Users\hbaum\Documents\Arduino\libraries\FastLED\src/fastpin.h:62:37: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   62 |  inline void lo(register port_ptr_t port) __attribute__ ((always_inline)) { *port &= ~mPinMask; }
      |                                     ^~~~
C:\Users\hbaum\Documents\Arduino\libraries\FastLED\src/fastpin.h:63:34: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   63 |  inline void set(register port_t val) __attribute__ ((always_inline)) { *mPort = val; }
      |                                  ^~~
C:\Users\hbaum\Documents\Arduino\libraries\FastLED\src/fastpin.h:65:42: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   65 |  inline void fastset(register port_ptr_t port, register port_t val) __attribute__ ((always_inline)) { *port  = val; }
      |                                          ^~~~
C:\Users\hbaum\Documents\Arduino\libraries\FastLED\src/fastpin.h:65:64: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   65 |  inline void fastset(register port_ptr_t port, register port_t val) __attribute__ ((always_inline)) { *port  = val; }
      |                                                                ^~~
C:\Users\hbaum\Documents\Arduino\libraries\FastLED\src/fastpin.h:228:44: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
  228 |  inline static void hi(register port_ptr_t port) __attribute__ ((always_inline)) { }

Hallo,

da wurde wohl die Toolchain aktualisiert und nun wird C++17 verwendet. Was ein begrüßenswerter Schritt ist. Zieht leider immer einen Rattenschwanz nach sich. Das Keyword register ist deprecated. Noch wird es mit C++17 geduldet, deswegen die Warnung. Allerdings sollte Daniel seine Lib überarbeiten. Im Grunde sind alle Lib Programmierer gefordert ihre Libs anzupassen. Code ist nie fertig, er benötigt ständig Pflege. Damit muss man als Programmierer leben.

Anderes Bsp. Mit aktueller Toolchain und C++20 muss ich zum Bsp. die USART.h anpassen. Weil man verschiedene enums nicht mehr vermischen darf. Ich habe mir erstmal mit einem cast beholfen. Klingt erstmal total doof, gebe ich zu. Dient aber alles der Programmiersicherheit. Man müßte jetzt die USART Lib überdenken und neu aufbauen, sonst erliegt man der Versuchung nur irgendwelche kurzfristigen Tricks anzuwenden damit der Compiler Ruhe gibt. Bis Arduino aber auf C++20 wechselt fließt noch viel Wasser die Elbe runter ... und die meisten Leute wird es gar nicht interessieren. Arduino ist immer noch auf Stand C++11. Könnte man ändern auf C++14 oder gar C++17. Wobei erst gcc 9.4.0 zu 100% C++17 unterstützt. Sprich der C++17 Standard wurde erst in gcc 9.4.0 komplett umgesetzt. Alle Versionen darunter unterstützen den auch, die letzten Winkel könnten aber fehlen, wem das wichtig ist.

Ich weiß jedoch nicht ob für den ESP überhaupt der gcc verwendet wird. :wink:

Bevor das falsch verstanden wird. Den Standard C++n darf man nicht verwechseln mit der Toolchain/Compiler. Der Standard gibt die Dinge vor. Diese müssen in der Toolchain/Compiler umgesetzt werden. Die obige register Warnung betrifft demzufolge alle Toolchains die C++17 unterstützen.