断函数中有 时分秒三个变量:
用 xxx(hour << 16 | minute << 8 | second);
这样定义xxx
void xxx(int a)
{
.... // declare hour, min,sec, etc.
hour = a >> 16 & 0xffff;
min = a >> 8 & 0xff;
sec = a & 0xff;
....
}
前提: int 至少32位. 不过现在几乎所有的CPU int都至少32位.
当
主函数与中断函数共用变量时,可能发生:
1、主函数对变量的 读-写,可能造成中断函数对变量的 读-写无效。
如:当主函数刚刚把变量读入到内部
寄存器时,还未再回写到变量中 时,发生中断,中断中改写了变量。当中断返回时,主函数将值再回写到变量中。造成中断函数对变量的改写无效。
2、多字节变量读取错误。
如:当变量的其中一个字节读入到寄存器中时,发生中断,中断中改写了变量值。当中断返回时,变量的其他字节继续被读入到寄存器中,造成新旧字节组合错误。