讲讲比较简单也比较常用的情况.
中断内用到的临时变量小于8byte,这些临时变量存在R0~R7中,发生中断后,编译器会自动生成"把中断内用到的临时变量压入堆栈中"的指令,保护现场,退出中断前,编译器会自动生成"恢复现场"的指令.
假如你只用了1byte的临时变量,编译器只会把1byte压入堆栈.
上述我都验证过.
至于你说的Xdata区域,我想编译器也会压入堆栈,保护现场.
51中函数的临时变量是编译器分配的,每次调用该函数时,临时变量的地址是固定不变的.
假如在执行该函数时,发生了中断,中断中又调用了该函数,就会发生错误.
这种情况keil会有编译警告提示.假如你能确认不可能同时发生调用该函数,你可以忽略该警告.
|