本文主要介绍了单片机堆栈清理技术,提出了在单片机堆栈清理技术不同于常用的中断保护现场的方法,提出不必保护现场,从而能快速响应的处理方法,以适应实时处理要求较高任务的需要,在多个实际课题于加以运用,取得了成功。
问题的提出 在实时测控系统中,为了提高响应速度,一般采用中断技术,并且使中断服务程序尽量短,在程序中少用寄存器和存储器,这样在保护现场时,减少保护程序。而在某些实时性要求较高的测控系统中,程序正常运行时往往是周而复始地做些常规工作,如显示、键盘扫描、一定周期的数据采集、控制等,当中断请求到来后,则要求立即响应,做大量工作,之后再回到周而复始的工作。
堆栈清理技术在多个项目中应用得到较好的效果,如在嵌入式系统中对与上级机通讯的响应等,当然在使用堆栈清理技术将使处理器最近一次的常规工作的结果有可能丢失,在对外设的操作过程中的失控。这些只要在重要工作的过程中关闭中断,而只丢失无关大局的数据。
实例应用
在我们设计的一个《三吨动态电子秤》系统中,有四个可屏蔽中断源:(1)称量中断,可以键盘中断,也可以"称量到位开关"中断申请;(2)为采用数字滤波而设置的采样周期中断;(3)A/D转换结束中断;(4)微型打印机的中断。由于称量过程是随机发生的,所以其中第一个中断是随机发生的,第二、三个中断源是在采样、滤波时由程序控制是否允许中断,第四个中断发生在打印过程中,也是可以程序控制的。那么,如何将四个中断有机地结合在一起呢?
这个系统运行时,微处理器始终在显示、键盘扫描、数据设置、等待称量信号的输入中,而称量信号的输入又是一个随机发生的信号,我们无法确定何时发生及保护什么现场,并且要求响应及时。在这种情况下,采用常规的中断处理方法将由于不能尽量保护现场,引起无法确定堆栈的栈顶值,而使程序"跑飞"。我们采取了一种堆栈清理技术,使得程序得以顺利运行。
堆栈清理技术是将程序分为两部分,主程序做常规工作;称量处理程序进行数据采样、数字滤波等工作。这两部分程序的连接是在中断服务程序中实现的,在中断服务程序中,首先取回栈顶,然后存入称量处理程序的首地址,当服务程序返回时,即可进入称量处理程序。在这段程序中,首先关闭称量中断,进入数字滤波程序,打开采样中断、A/D转换中断。处理完后关闭这两个中断进入打印程序。使用打印中断,结束后,关闭打印中断,重新开启称量中断,转回常规工作的入口地址,显示、键盘扫描、等待下一次称量,从而控制了堆栈的高度,程序得以正常运行。