что наблюдаю:
Код
#include <string.h>
unsigned char src[ 24 ] @ 0x0000F0F0 = "012345678901234567890123";
unsigned char dst[ 24 + 4 ] @ 0x10001000;
int main()
{
memcpy( &dst[2], src, sizeof( src ) );
return 0;
}
unsigned char src[ 24 ] @ 0x0000F0F0 = "012345678901234567890123";
unsigned char dst[ 24 + 4 ] @ 0x10001000;
int main()
{
memcpy( &dst[2], src, sizeof( src ) );
return 0;
}
копирую выровненное на невыровненное. Вываливаюсь в HardFault на реальном железе. В железе и симуляторе наблюдаю причину - некорректный НА МОЙ ВЗГЛЯД код.
перед вызовом iar_unaligned_aeabi_memcpy
R0 = 0x10001002
R1 = 0x0000F0F0
R2 = 0x00000018
Нажмите для просмотра прикрепленного файла
все работало в железе ( по крайней мере проблем не наблюдал ) пока не включил выключеные фаулты ( согласно доке Using Cortex-M3 and Cortex-M4 Fault Exceptions apnt209.pdf )
SCB->SHCSR |= 0x00007000;
SCB->CCR |= 0x18;