--- .pio/libdeps/livingroom8266/NeoPixelBus_ID547/src/internal/NeoEsp8266DmaMethod.h 2019-06-25 11:14:33.000000000 +0200 +++ .pio/libdeps/livingroom8266/NeoPixelBus_ID547/src/internal/NeoEsp8266DmaMethod.h.2 2019-06-25 11:14:40.000000000 +0200 @@ -195,7 +195,12 @@ _i2sBufDesc[indexDesc].sub_sof = 0; _i2sBufDesc[indexDesc].datalen = blockSize; _i2sBufDesc[indexDesc].blocksize = blockSize; - _i2sBufDesc[indexDesc].buf_ptr = (uint32_t)is2Buffer; + union { + uint8_t *ptr; + uint32_t value; + } ptr; + ptr.ptr = is2Buffer; + _i2sBufDesc[indexDesc].buf_ptr = ptr.value; _i2sBufDesc[indexDesc].unused = 0; _i2sBufDesc[indexDesc].next_link_ptr = (uint32_t)&(_i2sBufDesc[indexDesc + 1]); @@ -361,12 +366,15 @@ case NeoDmaState_Sending: { - slc_queue_item* finished_item = (slc_queue_item*)SLCRXEDA; - + union { + slc_queue_item *ptr; + uint32_t value; + } ptr; + ptr.value = SLCRXEDA; // 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); + (ptr.ptr + 1)->next_link_ptr = ptr.value; s_this->_dmaState = NeoDmaState_Zeroing; }