分享PIC18单片机的低优先级中断的中断现场保护的恶心之处

2020-02-06 10:24发布

本帖最后由 heqiaosheng 于 2014-11-6 14:34 编辑

因为是初次使用PIC18f25k80单片机,所以对应它的中断保护没什么了解,只知道有两个优先级,然后项目中使用到的外设比较多,中断也比较多,所以就将中断分成高优先级和低优先级。

然后诡异的事就发生了,程序经常性的跑飞,大概纠结了一个月,那时我都怀疑我的编程能力了,最终找到了问题,我草,PIC18的低优先级中断竟然不保护现场!!!

希望以后用到此系类的同志们能注意到这个问题,强烈推荐只使用高优先级中断。虽然网上有中断保护的汇编代码,但是我没有用,我觉得高优先级中断就够了,那个恶心的低优先级中断就让它长眠吧!!!

图片来源:MPLAB C18 C 编译器入门 [06版].pdf 的102页。已经上传过了,要下载的请打开此链接 http://www.amobbs.com/thread-5603111-1-1.html

QQ截图20141106142645.png (139.67 KB, 下载次数: 0) 下载附件 中断现场保护 2014-11-6 14:26 上传

MPLAB C18 C编译器用户指南.pdf (1.07 MB, 下载次数: 37) 2014-11-6 14:27 上传 点击文件名下载附件


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
tdh03z
1楼-- · 2020-02-07 00:11
那个仅是说明PIC18芯片高低中断发生时,芯片自身的现场保护吧,如果用C18编译器,编译器会自动处理这些,

你发的MC18用户指南中也对中断进行了说明啊,编译器会按照关键字进行对应的处理的
“interruptpragma伪指令将函数声明为高优先级的中断服务程序;interruptlowpragma伪指令将函数声明为低优先级的中断服务程序”
“高优先级中断使用影子寄存器保存和恢复最小现场,而低优先级中断则使用软件堆栈保存和恢复最小现场”

还是多找找程序中是否有其它问题。
fengyunyu
2楼-- · 2020-02-07 03:02
 精彩回答 2  元偷偷看……
hzy789
3楼-- · 2020-02-07 08:33
tdh03z 发表于 2014-11-7 21:32
那个仅是说明PIC18芯片高低中断发生时,芯片自身的现场保护吧,如果用C18编译器,编译器会自动处理这些,

...

8楼正解,我用PICC18 PRO编译器,不用自己保存现场,一直正常工作。
spcm
4楼-- · 2020-02-07 10:37
用pic18f25k22,XC8编译的,重要中断放高优先级的,次要的比如串口(这个项目不需要通信)就放低优先级的,做过各种干扰实验了,还没有出现过跑飞的现象。
firstelec
5楼-- · 2020-02-07 15:21
用XC8吧,现在正版打折。
CHEN_LIU
6楼-- · 2020-02-07 17:33
遇见过,该中断的没进去...郁闷很久

一周热门 更多>