Nothing to do with your question, but these may be more useful as an array of values as opposed to separately named. Maybe same with the time unsigned longs.
struct Day
{
uint8_t aeValues[5];
uint32_t abTimes[2];
};
I never tried this as I knew you could do this with arrays so didn't even think to try it. So question... if you try and do this with a normal array it fails so why does it work with an array structed like this? Slightly confused.
why is a copy of data necessary from one index to another at all?
Your structure has a time stamp any way. Wouldn't the usage of the array like a ring buffer be more appropriate?