中断也是轮询吗??

偶然看到这么一句话:中断是“轮询” !    当时第一感觉:嗯     肯定不是      中断是在发生的时候,保护好现场后,自动跳转到中断处理程序。      然而进一步思考,到底cpu是怎么知道什么时候发生中断的??  这时候给我的第一感觉就是这是硬件的事情,软件不需要管。。。     是的        写驱动和app都不用关心这些,但是心里还是有种莫名的失落感。。。(ps:国庆玩太久,需要充实一下  哈哈)      

于是继续找资料看,如下一段话很好的解释了中断的本质:虽然人们在谈到中断(Interrupt)时,总会拿轮询(Polling)来做“反面”例子,但中断和轮询并不是完全对立的两个概念,呃,它们是对立统一的。
CPU执行完每条指令时,都会去检查一个中断标志位(ps:只不过用的微代码,在应用程序中存在指令开销!)”,这句话是所有关于中断长篇大论的开场白,但很容易被人忽略,其实,这就是中断的本质。
举个例子,CPU老板是一家公司的光杆司令,所有的顾客都要他亲自跑去处理,还要跟有关部门打点关系,CPU觉得顾客和公关这两样事它一个人搞不来,这就是轮询;终于这家公司升级发展了,CPU老板请了一个秘书,所有的顾客都先由秘书经手,CPU心情好的时候就去看一下,大部分时间都忙着去公关了,这时它觉得轻松了很多,这就是中断了~~
也就是说,中断和轮询是从CPU老板的角度来看的,不管怎样,事件都还是有人来时刻跟踪才能被捕获处理,不过是老板还是秘书的问题。所有的中断(或者异步,回调等)背后都有一个轮询(循环,listener)!

当然不同的CPU,不同的内核,对于中断的处理是不同的。比如:cortex—M3内核的CPU,当外设请求一个中断时,nvic会启动中断服务,cortex-M3的MCU进入中断模式的同时会把一组寄存器压入堆栈中,最重要的是这个压入过程也是由微指令完成!!!   这样相比arm7等其他内核,中断延迟的时间会减少,当然还有很多其他改善的地方,具体要看内核相关资料。

ps伪指令、微代码、伪代码:

        伪指令就是没有对应的机器码的指令,它是用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行!


微代码(Microcode):用简单的硬件操作来模拟当时无法用技术直接实现的复杂指令

微代码首先于1951年由英国的M.V.Wilkes引入,它是计算机工程学上的重大创新.

它把计算机清楚的分成了两个概念层:体系结构和实现.


伪代码(Pseudocode)是一种算法描述语言。使用伪代码的目的是使被描述的算法

可以容易地以任何一种编程语言(Pascal,C,Java,etc)实现。因此,伪代码必

须结构清晰、代码简单、可读性好,并且类似自然语言。 介于自然语言与编程语言

之间。以编程语言的书写形式指明算法职能。使用伪代码, 不用拘泥于具体实现。

相比程序语言(例如Java, C++,C, Dephi 等等)它更类似自然语言。它是半角式化、

不标准的语言。可以将整个算法运行过程的结构用接近自然语言的形式(可以使用

任何一种你熟悉的文字,关键是把程序的意思表达出来)描述出来。


以上纯属个人理解,如有错误,请见谅!


独钓千古愁:2013.10.10



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值