审慎处理单片机中断:中断相当于比主程序优先级高的线程
发布时间
阅读量:
阅读量
有些小伙伴被单片机中断这种功能所吸引,在实际操作中热衷于在此处进行各种操作和设置;然而这种做法可能会导致他们因无法及时发现并定位潜在的问题而陷入困惑与迷茫;本文旨在纠正这一不良习惯,并对单片机中断的工作原理进行详细阐述
在无中断的情况下,单片机运行主程序流程.一旦发生中断事件,单片机将立即启动相应的中断处理程序.由此可知,作为优先级高于主程序的独立实体,每一个定时或串口中断事件都可被视为一个独立的线程.鉴于此,小小的单片机却肩负着manage multi-threaded operations的任务.这种多线程管理可能带来资源竞争的问题,具体表现为global variables之间的竞争或是函数调用间的竞争.
在主程序执行过程中对同一个全局变量进行读取与修改时会引发冲突问题当发生中断时在相应的中断服务程序中同样会对该全局变量进行操作导致出错现象例如在一个基于8位机的系统中该操作会导致结果A而在16位机环境下则可能出现结果B
Cnt = 0;
EA = 1; //开中断
while (1)
{
if (Cnt < 300)
{
Cnt++;
}
else
{
Cnt = 1;
}
}
在一个1毫秒中断里
全部评论 (0)
还没有任何评论哟~
