51内核使用外部中断在中断中使用printf后无法回到主函数问题

问题描述:
在51内核单片机中,我用一个引脚作为输入脚,开启中断使能,再在主函数中检测该引脚输入电平来控制另外一个引脚的电平高低,此时发现要是在引脚中断中使用printf打印都会导致程序无法回到主函数的情况,但是程序可以反复触发中断,就是无法回到主函数,只要把printf屏蔽或者使用串口自写的send函数就不会产生问题。

产生这个问题原因一开始怀疑是中断嵌套问题,但是经过排查并不是,因为中断优先级已经处理了这件事情,而且现象也是先触发的外部中断,经过排查和百度之后发现,51内核很多都有这个问题。

最后的软件规避方式:
要么自己重写printf函数
要么不在中断里面打印

如果你实在要用,那还有一个规避方式,

可以以下这么处理:

//在重写的putchar()函数中先关闭外部中断或者总中断(以下方式二选一)
//	EX0 = 0;			//外部中断关闭 
	EA=0;               //总中断关闭


//然后在你主函数执行完代码之后开启你关掉的中断(上面选上面下面对应选)
void main()
{
    
    
//	EX0 = 1;			//外部中断关闭 
	EA=1;               //总中断关闭
}

这样子就可以解决了。

猜你喜欢

转载自blog.csdn.net/weixin_43673603/article/details/125190740
今日推荐