设为首页  |  加入收藏
新闻动态
中断禁区
发布人:管理员   发布时间:2014-4-18
       中断服务子程序一定会与其他子程序分享某些数据。对于访问到这些共享数据的代码部分,程序设计时要特别小心,以免破坏数据的完整性。现考虑一个不甚合理但能说明问题的例子。在某一非中断的子程序中有几条指令:LDB  AL,INT_PENDING
    ANDB AL,#BIT_PENDING
其中bit_mask=11110111B,这几条指令的目的是清除INT_PENDING的位3,即屏蔽掉HSO中断。在简单运行环境下,指令顺序执行,目的如愿以偿。但在并发环境下运行,就可能造成严重的后果。现假定在执行后AL具有同样的值。这时,若转而执行HSI中断服务程序,中断返回时INT_PENDING变为00001011B。微机消谐继而执行ANDB指令,其结果使AL的值改为00000111B,因此STB指令执行后,INT_PENDING也为0000011B。实际上,由于HSI中断已得到服务,清除INT_PENDING的位3后,应该使INT_PRNDING的值变为00000011B,在并发环境下运行的上述3条指令,由于未能连续执行,导致错误结果:造成一次虚假的HSI中断。引起这类需哦伍德根本原因是:当一个子程序正在访问某一共享的变量过程中,另一个并发的子程序也访问了这个变量。
下一篇:中断寄存器
扫描添加微信账号