下面是一个定时器的中断函数,即定时器的比较中断函数
__interrupt(vect=22) void CSystem::TimerISR(void)
{
static bool Toggle;
// Read the flag before clearing it
volatile char x = TV.TCSRV.BYTE;
// Clear compare match flag A
TV.TCSRV.BYTE = 0x19; // enable control fan
// Allow interrupts
and_ccr(0x7F);
// Run system tick every 1ms
if (Toggle) {
Toggle = false;
CSystem::Tick1ms();
} else {
Toggle = true;
}
}
有两个问题:
1. 一直都有这样一个习惯,就是再中断函数中在清寄存器标志位前会读该标志位,但现在回到 思考一下,觉得很迷茫,为何要这样做呢?
2. 还有,将下面语句:
volatile char x = TV.TCSRV.BYTE;
改写成:
char x = TV.TCSRV.BYTE;
程序也不会出问题,为何要加上一个volatile? 这也不是一个其他函数要用到的变量啊。
希望哪位给小弟指点迷津。多谢!!