中断函数中变量传递的问题

中断函数中有 时分秒三个变量,怎么把他传递给 void xxx(int a)中圆括号里的a 呢?
希望得到大家的帮助,谢谢!

  断函数中有 时分秒三个变量:
  用 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、多字节变量读取错误。
如:当变量的其中一个字节读入到寄存器中时,发生中断,中断中改写了变量值。当中断返回时,变量的其他字节继续被读入到寄存器中,造成新旧字节组合错误。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-08
这样调用 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位.追问

谢谢,这样是整合在一起了,可能是我描述有问题,不过问题已经解决了,非常感谢你的回复。如果 不介意的话可以留个联系方式吗?因为是初学单片机,是自学的,好多知识不系统也不透彻。
再次感谢了,先提高悬赏的方式能多赠与您一些财富值的吧,再次感谢!~

本回答被提问者和网友采纳
相似回答