邀请:@maychang
@damiaa
@vincentc543
@RichSJ
参与回复
请看以下一、二两个函数,请问,当程序执行到(1)处时,此时RTC中断突然发生,会不会 导致 close这个函数执行完毕后 dyjc 并不等于 1190 ,
理由如下:比如 dyjc = 1190这一句在低层要分成4条机器指令来完成,而在这4条指令的第2条刚执行完毕时,RTC中断发生了,此时 MCU 转而去执行 dyjc++相对应的多条机器指令去了,执行完dyjc++相对应的多条机器指令后,再执行 dyjc = 1190 相对应的第3、4条机器指令,因此可能 close()函数执行完毕后, dyjc 最终的值可不是1190,这样分析,对吗?
如果对的话,如何避免这种情况的发生,谢谢大家。
一、
void close( void)
{
.......
cs_low_fm = 0;
dyjc = 1190; // (1) 处
.......
}
二、
void RTC_IRQHandler(void) // RTC中断 每秒执行一次
{
.......
dyjc++; // (2) 处
.......
}
|