问题描述:
在51内核单片机中,我用一个引脚作为输入脚,开启中断使能,再在主函数中检测该引脚输入电平来控制另外一个引脚的电平高低,此时发现要是在引脚中断中使用printf打印都会导致程序无法回到主函数的情况,但是程序可以反复触发中断,就是无法回到主函数,只要把printf屏蔽或者使用串口自写的send函数就不会产生问题。
产生这个问题原因一开始怀疑是中断嵌套问题,但是经过排查并不是,因为中断优先级已经处理了这件事情,而且现象也是先触发的外部中断,经过排查和百度之后发现,51内核很多都有这个问题。
最后的软件规避方式:
要么自己重写printf函数
要么不在中断里面打印
如果你实在要用,那还有一个规避方式,
可以以下这么处理:
//在重写的putchar()函数中先关闭外部中断或者总中断(以下方式二选一)
// EX0 = 0; //外部中断关闭
EA=0; //总中断关闭
//然后在你主函数执行完代码之后开启你关掉的中断(上面选上面下面对应选)
void main()
{
// EX0 = 1; //外部中断关闭
EA=1; //总中断关闭
}
这样子就可以解决了。