关于STM32F4系列MCU非字节对齐访问的问题

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

最近遇到了非对齐字节访问的bug,于是做了一个实验,遇到了一些疑惑,如下:

  1. 为什么当我下面的代码访问非对齐字节时系统不会崩溃?

  2. 什么情况下unsigned char buff变量的起始地址会是2的倍数而不是4的倍数?

我使用的ARMCC编译器没有启用编译器优化。

struct xxx {
    unsigned char a;
    unsigned char b;
    unsigned char c;
    unsigned int d;
    unsigned char e;
    unsigned char f;
}__attribute__((packed));
unsigned char buff[100];

int main()
{
    struct xxx aaa;
    aaa.d = 0xffffffff;
    return 0;
}
arm embedded bytebuffer mcu armcc
1个回答
0
投票

为什么当我下面的代码访问非对齐字节时系统不会崩溃?

你认为为什么会这样? ARM 具有

STRB
/
LDRB
指令,用于将单个字节从寄存器移动到内存,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.