单片机编程和PC端编程有所不同,笔者根据已有的粗浅的编程经验,列写几个认为比较重要的点。
首先对文中的名词作适当的约定。文章的“事件”可理解为“中断”,每一个“中断”发生时,ISR将发送对应于该“事件”的“消息”;“事件”通常理解为“异步事件”,为了方便,即使是固定周期的定时中断,亦称为“异步事件”。
中断服务程序(ISR)内不处理事务(或数据),将程序流程转移到主程序
ISR仅负责发送事件标志,以通知主程序(不称其为“应用程序”的原因是,文章的总结基于不使用RTOS的假定)发生了异步事件。但这并非绝对,在一些需要极精准的定时控制的或者数据必须在事件发生时马上被采集或处理的场合中,我们仍难以避免在ISR中作数据采集、处理或者执行控制任务,或者兼有之,但通常我们应保证在这种情况下ISR的执行时间仍然非常短。
如何通知主程序异步事件发生了呢?这里列出三种方案。
利用一组标志变量(或者为了节省存储空间,使用标志位),通过对标志变量的置位、复位来实现事件的通知和撤销(表明事件已被处理)。该方案伪代码如下
int main()
{
Init();
while(1)
{
if(event_flag)
{