以下は、Barrelfish オペレーティング システムの実行中に Pandaboard の LED を点滅させるコードです。gpio_oe
私の質問は、およびの定義から 'volatile' キーワードが削除された場合、なぜ LED が点滅しないのかということですgpio_dataout
。
static volatile uint32_t *gpio_oe = (uint32_t *)(GPIO_BASE + 0x0134);
static volatile uint32_t *gpio_dataout = (uint32_t *)(GPIO_BASE + 0x013C);
void led_flash
{
// Enable output
*gpio_oe &= (~(1 << 8));
// Toggle LED on and off till eternity
while(true)
{
*gpio_dataout ^= (1 << 8); // Set means LED on; Clear means LED off
time_delay(); // To give blinking effect
}
}
変数の値がプログラムの外部のソースを介して自発的に変化する可能性がある場合は、volatile を使用する必要があることを知っています。しかし、ここではそのようなケースは見られません。LED を点滅させるための while ループ全体を無意味にする、コンパイラーが実行する最適化は何ですか? そして、そのような最適化の背後にあるロジックは何ですか。そのような最適化が理にかなっている正当なケースはありますか?