--- .piolibdeps/NeoPixelBus_ID547/src/internal/NeoEsp8266DmaMethod.h	2018-12-25 06:37:53.000000000 +0100
+++ .piolibdeps/NeoPixelBus_ID547/src/internal/NeoEsp8266DmaMethod.h.2	2019-03-01 22:18:10.000000000 +0100
@@ -169,7 +169,7 @@
             _i2sBufDesc[indexDesc].sub_sof = 0;
             _i2sBufDesc[indexDesc].datalen = blockSize;
             _i2sBufDesc[indexDesc].blocksize = blockSize;
-            _i2sBufDesc[indexDesc].buf_ptr = (uint32_t)is2Buffer;
+            _i2sBufDesc[indexDesc].buf_ptr = is2Buffer;
             _i2sBufDesc[indexDesc].unused = 0;
             _i2sBufDesc[indexDesc].next_link_ptr = (uint32_t)&(_i2sBufDesc[indexDesc + 1]);

@@ -329,11 +329,13 @@
             case NeoDmaState_Sending:
                 {
                     slc_queue_item* finished_item = (slc_queue_item*)SLCRXEDA;
+                    uint32_t **ptr = reinterpret_cast<uint32_t **>(&finished_item);
+                    uint32_t dat = *reinterpret_cast<uint32_t *>(ptr);

                     // the data block had actual data sent
                     // point last state block to first state block thus
                     // just looping and not sending the data blocks
-                    (finished_item + 1)->next_link_ptr = (uint32_t)(finished_item);
+                    (finished_item + 1)->next_link_ptr = dat;

                     s_this->_dmaState = NeoDmaState_Idle;
                 }