闲来没事,发个总结供大家消遣。希望高手补充指正。 在此我没有区分51系统和嵌入式系统定义,可同等看待。
51系统&嵌入式系统————中断下的一切可能 我对中断的理解: 中断分硬件中断、软件中断 中断是前台程序程序调度的入口,异步事件处理的入口,CPU和外部沟通的桥梁,系统节拍的由来等等,所以可以说中断是系统的心脏是操作系统的一切。 中断也随之带来了很多问题,我对中断所带来的问题的总结是:中断之下皆有可能,中断带来了一切不可“预知”的问题。中断问题是我们写程序架构的时候首要应该避免的问题,以免等写完程序才发现出现架构的不合理性,以及在后期调试或者运行当中出现很多“奇怪”和一些不便于查找的问题。 并发和竞争的问题:当一个异步中断(事件)产生时,此时CPU处理程序的情况是不可预知的,我们不知道他运行到那里了,正在执行那个程序,那个数据结构,而当中断要求占有正在执行的资源的时候就出现了并发和竞争的问题,在次情况下,很有可能出现资源被改写的可能,而当中断返回后,CPU却要执行错误的程序或者资源。 解决中断带来的问题的方法: 1、 最简单的方法:关闭中断,防止一切的异步事件的发生当然就防止竞争的出现,避免了对当前程序或者资源的干扰。问题:如果当前程序执行的很长就导致了CPU丢失中断时间,造成有些事件不能被处理,所以我们要保证关闭中断的时间尽量的短。 2、 改写函数为重入性函数,这样中断只能改写函数的局部参数而不能修改全局参数从而解决了中断带来的问题。问题:在51有限资源下频繁的使用重入性函数会造成很大的资源浪费。 3、 操作系统中提到的“原子操作”,如同51下的单字节指令、标志位,这样一来非此即彼,解决了并发的可能。问题:复杂的程序操作是不可能只有单字节指令操作的,多字节操作起来就很难达到期望的效果。 4、 操作系统中提到的“信号量”的概念,其也就是高级的标志位。 在51系统当中也可以引进此概念,构造一个简单的信号量,可以解决多任务抢占资源的问题。 5、“自旋锁”的概念等等,除此之外在操作系统中有很多细分的方法应对不同的场合,可以解决中断所带来的的问题。 经验感觉: 除了上述的一些方法之外,当我们写程序架构的时候应该做到“中断程序” 和“主程序”之间要有界限,不能互相干扰,如果一些实时性要求很高的程序可以放在中断程序中执行,但是要保证函数的简短,防止中断嵌套带来的问题或者死循环等。
2008年1月16日晚 by一朝成名
|