>> Nice but far too complicated fix. The essential things were changing the >> type of a to a 32-bit pointer instead of being a 16-bit pointer, as you had >> observed, and fixing the D16 macro to compute the right index. >> >> In your current code you actually store 32 bits for each 16 bits value, and >> then don't use the upper 16 zeroes at all. >> > I already fixed the space issue, with the size of the uint32_t and the > indexes. > From the part that doesn't need typecast you are right, and changing the > pointer address is done. > > Now that this is solved, what would be the next step? Please test once more tomorrow the cleaned up code, and create a pull request. After that, you can start testing the Serial code. You will again learn more, as this time you'll enter to the wonders of C++ and C++11. I haven't even checked whether the compiler really optimises the const objects away, so more assembler reading. If there are any non-compile-time C++ constructors left, then we need to optimise more the C++ so that the compiler does the right thing and optimises those away. --Pekka