下面是一个定时器的中断函数,即定时器的比较中断函数
__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? 这也不是一个其他函数要用到的变量啊。
希望哪位给小弟指点迷津。多谢!!

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

