打印
[应用方案]

关于C和汇编同时使用的问题

[复制链接]
687|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
deviceplugs|  楼主 | 2016-5-11 22:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问:写的伺服电机的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);
沙发
yiyigirl2014| | 2018-8-13 20:34 | 只看该作者
汇编做有点复杂。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

135

帖子

2

粉丝