问:写的伺服电机的PID程序,用汇编模块来进行PID运算,同时还有另外一个数据处理程序,也写成了汇编模块,都在C里面被调用,问题是那个数据处理程序里面用到了汇编的DO循环,且这个程序是在定时器中断里执行的,其它的一些中断会影响这个定时器中断,这时候就产生了DO循环的影子寄存器保护的问题,想问问大家,在c语言的代码里面,怎么样在中断程序里进行影子寄存器的保护呢,如果整个程序都是汇编,那倒还好整,直接在中断里面PUSH.S,POP.S就可以了,但C里面怎么弄呢,我用的片子是DSPIC33FJ的
答:
MPLAB C30 用户指南第7章, 中断服务程序现场保护. 可以指定中断函数的属性.
为请求编译器使用快速现场保护 (使用 push.s 和 pop.s 指令),指定函数的
shadow 属性 (参阅第 2.3.2 节 “指定函数的属性”)。例如:
void __attribute__((__interrupt__, __shadow__)) isr0(void);
|