Еще ведь от модели МК зависит: на всяких "нулевках", если
копировать невыровненными словами, будет хардфолт. Т.е. недостающие
до слова из головы и хвоста надо побайтно, остальное - по словам. А еще, на каком-то МК, где буфер USB "честный" (т.е. 32-битное слово - это 32-битное слово с соответствующей адресацией), memcpy прокатывает при копировании между буферами, а если там 2 16-битных в одном 32-битном с 16-битной адресацией, memcpy вызвал хардфолт, приходилось по 2 байта в цикле…
Кстати, когда я себе обновил arm-none-eabi-gcc, то оказалось, что 15-й где-то что-то так наоптимизировал, что у меня вообще USB работать не стал (а 9-й нормально все собирал). Пришлось в Makefile дать указание, что конкретный файл нельзя оптимизировать…