void MonitorTask(VP_INT exinf) { volatile unsigned char old=PADR & 0x0f; volatile unsigned char new; while(1) { new=PADR & 0x0f; if(old & (~new)) wup_tsk(TSKID_ALERT); old=new; dly_tsk(100); } }というサンプルがあります。この場合volatileは必要なのでしょうか?
私の認識では、whileの中で、oldやnewは常に代入されているので最適化されず、(PADRはヘッダファイルでvolatileがついているので)必要ないと思いますが、最適化されて、volatileをつけないとまずいコンパイラはあるのでしょうか?
ご教授をよろしく。