我想使用易失性位字段结构来设置硬件寄存器,如以下代码
union foo {
uint32_t value;
struct {
uint32_t x : 1;
uint32_t y : 3;
uint32_t z : 28;
};
};
union foo f = {0};
int main()
{
volatile union foo *f_ptr = &f;
//union foo tmp;
*f_ptr = (union foo) {
.x = 1,
.y = 7,
.z = 10,
};
//*f_ptr = tmp;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,编译器会将其多次写入STR、LDR HW 寄存器。可怕的是,当寄存器被写入时,它会立即触发硬件工作。
main:
@ args = 0, pretend = 0, frame = 0
@ frame_needed …Run Code Online (Sandbox Code Playgroud)