void func1() {
//函数使用了乘法运算,因此需要使用寄存器进行参数传递, //默认是寄存器组0,因此timer0 中断会破坏我的乘法运算。 //但又不希望关闭中断。
}
timer0_int() interrupt 1 USING 0 { //中断使用是寄存器组0 }
因此想利用#pragma noaregs 指令,
#pragma noaregs void func1() { }
以禁止func1()使用绝对寄存器寻址,也就是不希望func1()中的运算使用寄存器组0。 但失败,这条指令都不起到我想要的作用。
#pragma NOREGPARMS 这条指令也试过,但也失败。
请问是否我的书写格式错误?还是还要其它的设置的?如何让不同的函数使用各自的寄存器组,而不互相干扰呢? 还有一个疑问: keil C51 的寄存器组只有4组,因此没有可能每个函数使用唯一的寄存器组。假设:func1() 被 func2() 中断,func2()在运行中又被func3()中断,func3()在运行中又被func4()中断,等等。每个中断函数都需要利用寄存器组进行运算,那么如何确保各自的寄存器组不被破坏呢?
|