中断里定义的变量在中断结束后是否还保留着?

2024-11-26 16:59:17
推荐回答(3个)
回答1:

在文件的顶部,#include的下方定义一个容易理解的变量:、
uchar myTickCount;

在中断里面就可以整他:
myTickCount++;
if(myTickCount>10){
想干啥就干啥;

}

在外面还可以继续使用:
IgnitLED()
{
switch(myTickCount){
case 0:
点亮第1盏;
灭掉第9盏;

break;

case 0:
点亮第2盏;
灭掉第1盏;

break;
......

}
}
如果你只希望变量被中断函数使用,外部不用,则定义为静态变量即可,每次回来参数为离开时的数值:
static uchar myTickCount;
----------------------------------------------------------------------------

祝你好运!
--Sunray Yao

回答2:

我觉得跟你具体程序有关,每次进入中断后,i的地址是一样的,也就是你主程序可能只是一个while(1)循环,这种情况可能发生。建议你跟踪一下程序,看看结果

回答3:

补充一下静态局部变量的知识
静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义,但不像自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。
(2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋值。数值型变量自动赋初值0,字符型变量赋空字符。
(4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源文件的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。