我有以下联盟:
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