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をつけないとまずいコンパイラはあるのでしょうか?
ご教授をよろしく。