我正在编写适用于Cortex-M0 CPU和GCC的代码。我有以下结构:
struct {
volatile unsigned flag1: 1;
unsigned flag2: 1;
unsigned foo; // something else accessed in main loop
} flags;
flag1
在GPIO中断处理程序和主循环中都会读取和写入。而flag2
只在主循环中读取和写入。
中断服务子程序如下:
void handleIRQ(void) {
if (!flags.flag1) {
flags.flag1 = 1;
// enable some hw timer
}
}
主循环看起来像这样:The main loop looks like this:
for (;;) {
// disable IRQ
if (flags.flag1) {
// handle IRQ
flags.flag1 = 0;
// access (rw) flag2 many times
}
// wait for interrupt, enable IRQ
}
当在主循环中访问flag2
时,编译器是否会优化对它的访问,以便每次读取或写入代码时都不会从内存中获取或存储它?
我不确定,因为要在ISR中设置flag1
,需要加载整个char
,设置一个位并将其存回。
sizeof(struct flags)
是什么? - Daniel Jour