今天,升级程序,发现编译器报告“*** WARNING L15: MULTIPLE CALL TO SEGMENT”,经过GOOGLE之后确认,是两个定时器中断调用了同一个非可重入函数。
于是,就搜索学习了一下关于KEIL的函数可重入行以及8051中断嵌套相关的内容,之后果断决定:把所有设置中断优先级的代码全部删除——即让中断优先级都为默认值(默认值应该都是一样的吧?)。
我是这样想的:
1、我的系统的实时性需求并不强,没有必要中断嵌套
2、以前的低优先级的中断处理代码并没有依赖于高优先级中断中设置的标志
3、尽量使代码的执行情况简单,可预知,在当前还比较菜的情况下,应该使用最基本的功能踏踏实实的编程,不应该耍弄奇技淫巧——万一出了奇怪问题,自己又解决不了。
另外,为什我都把所有的中断设为同一优先级了(全部默认),可KEIL编译器还是报那个警告啊。我的理解是:都是同一优先级,没有中断嵌套,这样即使中断调用同一个非可重入函数,应该也不会产生所谓的“可重入问题啊” |