如何在 ARM Cortex M4 上进行未对齐的 int 存储?

问题描述 投票:0回答:1

C 代码如何利用 Cortex M4 的未对齐 4 字节存储指令?

*(int*)p = x
大部分都有效,但偶尔我会得到这样的结果:

void Store(uint8_t* p, uint32_t a, uint32_t b)
{
  *(uint32_t*)(p + 0) = a;
  *(uint32_t*)(p + 4) = b;
}

which

gcc
然后编译为:

00000000 <Store>:
   0:   e9c0 1200       strd    r1, r2, [r0]
   4:   4770            bx      lr
   6:   bf00            nop

这当然会给出

HardFault
,因为 8 字节存储必须对齐。有没有办法编写存储以便 gcc 知道它们可以不对齐?也许有未对齐的 int 类型?

c gcc arm cortex-m
1个回答
0
投票

两种有效的方法是

memcpy
,以及定义未对齐的 int 结构,例如

typedef struct
{
  uint8_t d[4];
} my_uint32_t;
© www.soinside.com 2019 - 2024. All rights reserved.