arm コード ソース (arm-none-eabi-gcc) を使用してコードをコンパイルしました (Lite Edition だと思います)。
関数内で構造体変数を定義し、memcpy のように実行します。
typedef struct {
char src[6];
char dst[6];
uint16_t a;
uint16_t b;
uint32_t c;
uint16_t d;
} Info_t;
Info_t Info;
memcpy(Info.src, src, sizeof(Info.src));
memcpy(Info.dst, dst, sizeof(Info.dst));
最初の memcpy は通過しますが、2 番目の memcpy はアボートを引き起こしています。
gcc が memcpy を最適化し、アラインされていない構造体アクセスが発生していると聞きましたか?
構造体変数を単語境界などに合わせてみましたがうまくいきませんでした。
gcc の memcpy とアライメントの問題について詳しく教えてください。
ありがとう!