打印

疑问:highgear 大侠说8051不是向量中断?

[复制链接]
楼主: 刘前辈
手机看帖
扫描二维码
随时随地手机跟帖
21
qrshi| | 2011-10-31 13:09 | 只看该作者 回帖奖励 |倒序浏览
mark,谢谢。

使用特权

评论回复
22
刘前辈|  楼主 | 2011-10-31 14:06 | 只看该作者
说白了,由外部INTR管脚触发,CPU响应自动跳转到固定地址n*8+3地址(51系列)的机制就是向量中断,这个固定地址就是向量地址或者矢量地址。由一系列这样的向量地址构成了中断向量表。

   所以,带有固定中断向量表的CPU,也就是当外部中断管脚电平触发后,CPU不经任何软件控制,跳向固定向量地址单元的机制,其中断机制当然是向量中断。这还有什么疑问吗?51中断有没有中断向量表?在哪里?51外部中断INT0被触发后,只能跳向唯一的地址——属于它 n=0 ,中断向量=n*8+3=3的固定地址。这和X86 中断机制一样。

    需要讲清的是:所有由软件定义的功能内容,是LZ题目以外的事;所谓“动态”“安装”“可移动”“可变”都是第三方行为;和题目无关。——既然是X86和8051比较,当然都是说硬件CPU自动响应机制。否则成了“我X86比你8051……”

还有,说8051中断不是向量中断的大师,说说那是什么中断?看来世界流行51教材上都是瞎扯淡?
    我来抄一下内容:……



、、

使用特权

评论回复
23
刘前辈|  楼主 | 2011-10-31 14:23 | 只看该作者
本帖最后由 刘前辈 于 2011-10-31 14:45 编辑

22楼Cortex_M0说的是51 芯片技术发展的事情,摩尔定律。——和CPU 中断采用什么机制没关系。就好像51发展了近30年,MOV A,B 再快也一样。

还有:嵌入式系统(RTOS)有一条众所周知的定律:任何OS 机制,第一要素就是“与CPU速率无关(不假设CPU速率)”。——别来什么旧式51不行,流水线的高速51才行。——那叫什么软件?——研究出信号量的Dijkstra ,告诉用户:只能在80486以下的CPU上运行,将来的CPU可能不行?!呵呵……

           哲学家抢叉子的动作要快,就能获得“些微优先级”;慢了只好挨饿。——这叫什么机制?




20年前的C51,RTX51现在一样用。系统节拍12M时一样跳。highgear 的55ms OS节拍是多少年前的老黄历?如今照样跳,一个速率。一样的向量中断。和51一样。



、、

使用特权

评论回复
24
desert_hawk| | 2011-10-31 15:08 | 只看该作者
8086是产生中断后直接从向量表里取地址进行跳转,51是先跳转到固定的中断地址,再从这个中断地址执行跳转指令跳转到中断服务程序,是不一样的,刘前辈。:lol

使用特权

评论回复
25
desert_hawk| | 2011-10-31 15:12 | 只看该作者
8086的向量表里存的是中断服务程序的入口地址。
51的那个“向量表”称之为向量表有点勉强,叫做中断入口比较合适,因为里边存的是指令而不是地址。
刘前辈继续。

使用特权

评论回复
26
tony_j0204| | 2011-10-31 15:51 | 只看该作者
同求答案啊~~~~~~~ 1# 刘前辈

使用特权

评论回复
27
tony_j0204| | 2011-10-31 15:52 | 只看该作者
同求答案啊~~~~~~~

使用特权

评论回复
28
tony_j0204| | 2011-10-31 15:52 | 只看该作者
同求答案啊~~~~~~~

使用特权

评论回复
29
kfzy6| | 2011-10-31 16:11 | 只看该作者
辛苦了

使用特权

评论回复
30
killvx| | 2011-10-31 17:02 | 只看该作者
获益匪浅

使用特权

评论回复
31
dengm| | 2011-10-31 18:01 | 只看该作者
51 是固定的中断向量
x86是间接的中断向量, 有中断向量表(0000:0000..0000:03FF),  其中reset中断为固定的( FFFF:FFF0)

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
highgear + 1
32
刘前辈|  楼主 | 2011-10-31 19:26 | 只看该作者
51也有中断向量表!所谓中断向量表就是包含各个中断向量的一个“指针数组”。51是每隔8字节一个指针——即中断向量。

诸位朋友,我觉得,讨论不是以个人论点参与,否则永远没有正确结果。——我以书为证,谁都不会说“书上是瞎扯”吧,除了highgear 那种人之外;

我现在懒得抄,抄出来也会有人说是我自己胡编乱造。我从书上直接贴内容;所以我这几天找电子版,上面书名的权威性不用质疑,这么多重点大学都作为教材,教育部花巨资挑选、引进翻译的,能是烂书么?写几个“专家指导委员会”委员的名字:严隽永(翻译)尤晋元,史美林,孙玉芳,吴时霖,陈向群,高传善,谢希仁……其他一半不认识了。论坛上如若有人说上面都是草包,那他自己是什么?吃草包的ZHU ?——所以和这种人无法讨论。

    希望有不同观点的朋友拿出论据来,在我没有写出书来之前,我只能以书为证。它比我高明,“一句话就能把我噎回去——别人的书是胡扯,要不你写一本?”

提醒一下,不止一本51教材书说51中断是向量中断,可以看看马忠梅的书,周坚的书,Cortex_M0版主说最新的51教材都是这么写的。


、、

使用特权

评论回复
33
刘前辈|  楼主 | 2011-10-31 19:28 | 只看该作者
本帖最后由 刘前辈 于 2011-10-31 19:31 编辑

按照HWM老师的定义,看看X86芯片中断发生时,跳转了几次:
1、x86芯片是通过8259“中断管理芯片”将8个外部设备通过一个INTR管脚接入CPU;
   当INTR中断申请触发时,CPU首先从外部数据总线上获得中断类型号n(n=0~7),(一听外部数据总线就感觉慢了许多)以了解8个外设中是哪个申请了中断,——这算一次跳转吧。

2、CPU获得中断类型号n后,内部经(IP)=(n*4),(CS)=(n*4+2)计算出索引值后,从外部数据总线转向外部中断向量表中以该索引值找到内存M,再从M中获得ISR起始地址,然后通过外部地址总线转向该ISR。——外部地址/数据总线上存取了几次?

    依此看来x86至少比8051多跳转了一次,因为PC机外设是通过8259芯片接入CPU的,是多个外设共用一个中断管脚,所以需要多一步获取中断类型号,而且必须是通过外部数据总线上获取。8051没有这一步,即使是5个中断源作为索引值,也是内部总线存取了。——内部总线存取算跳转吗?

    看来8051比x86更有资格当选向量中断?哈……开玩笑而已,这种评定方法显然没有道理。——多一次/少一次跳转与向量中断与否没关系,是吧。



、、

使用特权

评论回复
34
lampfire| | 2011-10-31 19:51 | 只看该作者
记得 51 30H以前地址 应该是 外部中断地址 可存中断入口地址

使用特权

评论回复
35
lampfire| | 2011-10-31 19:54 | 只看该作者
先给向量中断 定个义,定义一致  再分对错!!! 如定义不能达成一致 还有什么对错之分!!

使用特权

评论回复
36
aihe| | 2011-10-31 19:55 | 只看该作者
白马非马

使用特权

评论回复
37
SeaSun| | 2011-10-31 20:28 | 只看该作者
刘前辈,你断章取义了!

使用特权

评论回复
38
highgear| | 2011-10-31 21:13 | 只看该作者
本帖最后由 highgear 于 2011-10-31 21:49 编辑

我们的刘前辈的理解力......:o


8051不是向量中断,这点毋庸置疑。先看看什么是中断向量:

http://en.wikipedia.org/wiki/Interrupt_vector

An interrupt vector is the memory address of an interrupt handler, or an index into an array called an interrupt vector table that contains the memory addresses of interrupt handlers. When an interrupt is generated, the processor saves its execution state via a context switch, and begins execution of the interrupt handler at the interrupt vector.

向量中断,又称矢量中断,向量矢量具有方向性。向量中断的意思是指这类中断具有指向性,即中断可以被设置指向不同的中断服务地址

8051的中断服务程序的地址是固定的,换句话说,cpu 知道中断地址,例如 03, 0B等, cpu 从03, 0B等取出的是指令。只是由于8051的中断服务之间的指令间隔很短,所以一般用指令跳转。

8086则不同,cpu 并不知道中断服务程序的地址, cpu 只是从内存某个特定的位置取出中断服务程序的地址,然后从取出的地址出运行中断程序。这种方法, 可以轻易灵活地控制中断去向。

用一个类比: 8051的中断是直接调用,而8086的向量中断可类比通过函数指针进行间接调用。

使用特权

评论回复
39
ifree64| | 2011-10-31 22:37 | 只看该作者
如果咬文嚼字的说向量中断的概念,我同意highgear的观念。
向量中断是指,专门有一个表格存放了中断服务函数入口的地址,cpu中断时从这个表格中取出中断服务的地址;
51是在中断时直接跳转到了0003这样的地址,没有一个位于内存中的表格来存放isr地址。

使用特权

评论回复
40
chencheng| | 2011-10-31 23:03 | 只看该作者
所有的中断,本质上都是查询!8051查到中断请求,因为是固定入口地址(也就是中断向量,还称为中断矢量),所以就直接转去执行相应的中断服务程序。而8086查到中断请求后,因为是信箱式约定方式(将所有中断服务程序入口地址集中在一起形成一张表,表中约定的位置存放指定的入口地址),所以要查表找到入口地址,再转去执行中断服务程序。注意,“查询”不是CPU中运算器或控制器之类的部件,而是专门的中断管理部件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则