在cpp / embedded中未对齐到32位写异常

时间:2017-01-26 18:13:44

标签: c++ c++11 attributes embedded pragma

我有以下联盟:

union {
    volatile  uint32_t  reg;

    struct {
        volatile  uint32_t  Var1 : 1;
        uint32_t : 3;
        volatile  uint32_t  Var2 : 4;
        volatile  uint32_t  Var3 : 8;
        volatile  uint32_t  Var4 : 8;
    } bit;
}unionA;

我有cpp文件我无法更改(我可以更改h或联合)。 cpp调用_register.unionA.bit.Var4

在程序集中我看到它试图写入偏移量16(位)。

CPU给了我一个例外。

处理器是Xtensa。 代码不是我的,但我需要将它与我的代码合并。 不能只改变.c / cpp .c

编译器将其跟踪到S8I(8位存储) 我想在这里禁用此选项并使用S32I。

我是否可以在编译器标志/ h文件中放置任何属性/ pargma /其他东西,因此它总是写32位而不是8位,偏移量为16

0 个答案:

没有答案