<div dir="ltr"><div><div><div>Hi Robin<br></div>That is a weird one, my only thought is word alignment of the RAM you are copying data too.<br></div><div>I have just sorted a data alignment issue where I was reserving space in RAM to instantiate classes in. The classes contain uint64_t attributes and the wheels would fall off whenever a 64 bit value was accessed. The problem turned out to be with the declaration of the RAM space:<br><br></div>uint8_t space_for_instance[sizeof(required_class)];<br><br>This block of RAM is not necessarily aligned on a word boundary so when the class is created like this:<br>pointer_to_instance  = new(&space_for_instance[0]) required_class();<br>the 64 bit data can be misaligned.<br><br></div><div>The fix is to force the reserved RAM to be word aligned like this:<br><br>uint32_t space_for_instance[(sizeof(required_class) +3)/4];  // Q'pla!<br><br></div><div>This is the quick fix, I will likely end up with something like:<br></div><div>union<br>{<br></div><div>  uint32_t dummy_to_force_alignment;<br>  uint8_t space_for_instance[sizeof(required_class)];<br></div><div>} space_for_instance;<br></div><div><br></div>  Peter<br><div><div><br><br></div><br><br><br></div></div>