初学PIC,遇到一个小问题。

2020-02-08 09:33发布

我用的PIC16F688 PICC编译器, 为什么我在中断服务程序中和主函数中调用同一个子程序就报错,单独调用都没问题,难到PIC不支持????

报错信息 (原文件名:QQ截图20111026180133.jpg)
主函数和中断函数中都调用了Delay()就出现这个情况。去掉其中一个就没问题,这咋会是呢?各位大虾指点一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
yklstudent
1楼-- · 2020-02-08 11:05
鬼知道你程序怎么写的 编译器没这么傻
gaolf_2000
2楼-- · 2020-02-08 13:11
那就再定以一个Delay1(),函数内部和Delay()一样,只是名字不同,哈哈--“中断特供函数”。
mowin
3楼-- · 2020-02-08 15:47
我们总是希望中断服务越短越好,楼主你还延时
晕,也许是我太菜了
eduhf_123
4楼-- · 2020-02-08 20:31
因为结构以及RAM数量太少的原因,PIC低档8位单片在用C语言写程序时,函数的局部变量实际不是在数据栈上、而是直接放在全局RAM中的,这样当主程序跟中断服务程序调用同一个子程序的时候就会引起潜在的重入问题,所以编译器严格地检测这种问题,一旦检测出来就报错。

如果确实有需要,解决的方法就如2楼所说,重新定义一个副本,分别用于主程序和中断服务程序。


不过如3楼所言,中断中应该尽量避免延时以及需要花很多时间的代码。
jianchangd
5楼-- · 2020-02-08 23:06
 精彩回答 2  元偷偷看……
millwood0
6楼-- · 2020-02-09 03:20
you should never ever call delay routines from within an isr.

it is poor coding.

一周热门 更多>