question about progmem I have a problem understanding the following code:



PROGMEM  prog_uint16_t x={1232,3232,43343};
rawlen = pgm_read_word_near(x);
memcpy_P(uSendBuff, pfSendBuff+1, rawlen * sizeof(uint16_t));


Why do we need this? -

rawlen * sizeof(uint16_t));


Why not this? -

memcpy_P(uSendBuff, pfSendBuff+1, sizeof(rawlen));
Probably because x is an array of integers (although in the code you posted you miss the '[]'), thus memcpy_p should run over rawlen integers, each integer occupies sizeof(uint16_t) bytes, hence rawlen * sizeof(uint16_t) bytes in program memory space.