いつもお世話になっております。
以下のようなプログラムで、loop1()はwhileを抜けられず復帰しないのですが、 loop2()は、正しく復帰します。
loop1と、loop2の違いは、Delay()を呼ぶか、呼ばないかの違いしか有りません。
タイマー割り込みによりTimerは、0になります。 (Flagは0のままとします。)
多分?ループ最適化による影響ではないかと思うのですが、コンパイルオプションを替えても状況は変わりません。
どの様なオプションが影響するか お教え願えないでしょうか?
int Flag ;int Timer;
void Delay( void ) { asm("NOP"); }
void Interrupt_1ms( void ) { if ( Timer > 0 ) Timer--; }
int loop1( void ) { Flag = 0; Timer = 100; while(1) { if ( Flag ) break; if ( Timer == 0 ) { return( 1 ); } } return( 0 ); }
int loop2( void ) { Flag = 0; Timer = 100; while(1) { Delay(); // 重要 if ( Flag ) break; if ( Timer == 0 ) { return( 1 ); } } return( 0 ); }