在复制大量数据时,可能会用到 ldm/stm、ldrd/strd 等指令,虽然 cortex-m3/m4 在访问存储器数据时不需要对齐,但这仅仅是 ldr/str 才行。而 ldm/stm 要求 32 位对齐,ldrd/strd 要求 64 位对齐。
我估计问题就出在传入的 StrAdd 参数没有对齐到 RTK_GPS_ 结构。
如果F4的接收缓冲区只接收 RTK_GPS_ 结构,那么应该定义为 RTK_GPS_ 结构变量,不要定义为字节数组。如果缓冲区还要接收其它类型的数据,那么可以定义为字节数组,但需要在定义时加一个aligned对齐修饰,例如:- uint8_t buffer[100] __attribute__((aligned (8))); // buffer对齐到8字节
|