5258|5

157

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

请教uCOS II的中断调用问题 [复制链接]

 遇到一个问题,我学uCOS ii ,也是Keil 编译器,没有搞懂的是系统时钟中断是在哪里调用的!比如51系列,在Keil里就有一个中断号什么的来判断,那么ucos ii 应该是如何做的呢?也就是在什么判断是进入中断的处理程序!

最新回复

几乎所有支持中断的CPU都有中断向量表的(包括x86),所有中断向量入口的集合就是中断向量表或是其中的一部分。 LPC2132,这个系列的我玩得还算比较熟的。ARM7的IRQ中断(UCOS2这里一般不会用到FIQ中断的,不管它)的中断向量地址确实是0x18,中断的流程是,一旦外设中断的信号进到CPU核的IRQ引线上来后,当前也没有关IRQ中断,那么CPU马上跳到0x18,无论是什么外设的中断(不讨论FIQ,只讨论IRQ的)。这个可能和51的不一样,51的中断向量表是不是不同的外设中断对应不同的地址呢,这个我不知道。ARM因为是有VIC中断向量控制器,所以可以让全部的外设IRQ中断都进到0x18中来,然后因为各个不同的外设中断在寄存器VICVectAddrx中注册过,而中断向量表中0x18处:LDR     PC, [PC, #-0xff0],这句话中[PC, #-0xff0]得到的地址就是对应中断VICVectAddr的地址,而这整句话其实就是把引发当前本次中断的服务子程序的首地址给PC(似乎说中断函数比较不专业)。自然,CPU就进到对应的外设中断服务子程序中来,处理该处理的中断。处理完后返回。 所以你能看到不同的IRQ中断都从0x18进来,然后借由VIC中断向量控制器硬件的支持,自然会进到对应的中断服务子程序中,没有错乱。 以上都是裸机下的,如果用到了操作系统,而且操作系统也要管理IRQ(或者说所有的IRQ处理流程中有操作系统的代码需要运行),那以上的流程就要变一下了。 UCOS2一般是需要管理全部的IRQ中断(如果你用到的中断不会引发任务就绪队列的变化,那一般可以不被操作系统管理,但不被他管理,要注意的地方就比较多了,也比较麻烦,一般不推荐),大致流程是,0x18这块不再是用LDR     PC, [PC, #-0xff0]这样一句话了,而是先进到UCOS2的IRQ处理代码中,然后,当然,最终要进到各自的中断服务子程序也还是需要VIC的支持。如果之前在初始化外设时,在对应的VICVectAddrx中注册过,那这里就能用到了,取出VICVectAddr中的值也就是当前应该进入的中断服务子程序首地址喏。处理完后,可能还要再进到UCOS2的代码中,如果任务就绪队列中有变化的话,引发一次调度。没有的话直接返回到之前被中断的那个任务。 以上都是ARM7内核的,但是你说你用的是LM3S6911,这个不是ARM7的,是最新的ARM11之后,Cortex-M3的内核,简称CM3核,它的汇编和体系结构都和ARM7不同,我大致看过,有不同,但似乎也不是特别大,7模式简化为2个模式,但中断向量这块变化是很大的,它里面也有VIC,只是这个是更先进的NVIC,不过不同的地方至少有一点你得注意,外设中断向量入口地址是完全不同的,ARM7的都是0x18,但CM3的,假如说是Timer0,那对应的在中断向量表中有专门给他留的(具体地址不知道,启动代码中一定有的),其他的中断不能占用这个位置,Timer0产生中断后,PC会自动的跳到那里,取得对应的中断服务子程序首地址后会跳到里面去处理中断。Timer1的就是另外的地址了,据说CM3支持共256个中断,其中240个外设中断,之前在学校玩CM3和UCOS2时,改过这个地方,不是很难的(虽然当时不懂原理)。  详情 回复 发表于 2012-12-29 15:14
点赞 关注
 

回复
举报

436

帖子

5

TA的资源

五彩晶圆(初级)

沙发
 
玩过51,但没有深入的搞过,主要玩的还是ARM。
LZ你的问题,我没法很具体的回答,但你要注意,开发环境是51+keil,UCOS2在这个平台上跑的话,中断怎么做,具体的实现流程,你如果知道51的裸机上中断是怎么做的怎么实现的,那么你又知道UCOS2运行流程或者说伪代码,那么你就会很清楚这些问题是怎么解决,说白了就是知道怎么把UCOS2移植到51上。

不是说用了UCOS2,在51+keil这样的平台和开发环境里面,中断的流程和代码写法就变了,必须是UCOS2要适应这个平台和开发环境,这就叫移植。换了是其他的嵌入式操作系统也是一样。

移植嵌入式操作系统,至少需要了解或熟悉3样东西:
1.CPU汇编/体系结构、
2.开发环境
3.被移植的操作系统的原理(不一定要特别的清楚,有时知道流程和伪代码也是可以的,你要做的只是在具体平台上实现这些伪代码的功能)。

点评

51我知道,51有中断呢向量入口地址!那么ARM呢?我搜索了一下,LPC2132的中断向量入口地址是0x18,不知道其他的是不是这样的!我现在看的现实中的 uCOS ii LM3S6911程序在里面没有找到入口地址以及入口地址跳转或  详情 回复 发表于 2012-12-29 13:50
 
 
 

回复

157

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

回复 沙发 lr2131 的帖子

51我知道,51有中断呢向量入口地址!那么ARM呢?我搜索了一下,LPC2132的中断向量入口地址是0x18,不知道其他的是不是这样的!我现在看的现实中的 uCOS ii   LM3S6911程序在里面没有找到入口地址以及入口地址跳转或链接的函数地址啊!我现在的问题其实就在这里!

点评

几乎所有支持中断的CPU都有中断向量表的(包括x86),所有中断向量入口的集合就是中断向量表或是其中的一部分。 LPC2132,这个系列的我玩得还算比较熟的。ARM7的IRQ中断(UCOS2这里一般不会用到FIQ中断的,不管它)  详情 回复 发表于 2012-12-29 15:14
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

4
 
原帖由 lixmlxm 于 2012-12-29 13:50 发表
51我知道,51有中断呢向量入口地址!那么ARM呢?我搜索了一下,LPC2132的中断向量入口地址是0x18,不知道其他的是不是这样的!我现在看的现实中的 uCOS ii   LM3S6911程序在里面没有找到入口地址以及入口地址跳转或链 ...
几乎所有支持中断的CPU都有中断向量表的(包括x86),所有中断向量入口的集合就是中断向量表或是其中的一部分。

LPC2132,这个系列的我玩得还算比较熟的。ARM7的IRQ中断(UCOS2这里一般不会用到FIQ中断的,不管它)的中断向量地址确实是0x18,中断的流程是,一旦外设中断的信号进到CPU核的IRQ引线上来后,当前也没有关IRQ中断,那么CPU马上跳到0x18,无论是什么外设的中断(不讨论FIQ,只讨论IRQ的)。这个可能和51的不一样,51的中断向量表是不是不同的外设中断对应不同的地址呢,这个我不知道。ARM因为是有VIC中断向量控制器,所以可以让全部的外设IRQ中断都进到0x18中来,然后因为各个不同的外设中断在寄存器VICVectAddrx中注册过,而中断向量表中0x18处:LDR     PC, [PC, #-0xff0],这句话中[PC, #-0xff0]得到的地址就是对应中断VICVectAddr的地址,而这整句话其实就是把引发当前本次中断的服务子程序的首地址给PC(似乎说中断函数比较不专业)。自然,CPU就进到对应的外设中断服务子程序中来,处理该处理的中断。处理完后返回。

所以你能看到不同的IRQ中断都从0x18进来,然后借由VIC中断向量控制器硬件的支持,自然会进到对应的中断服务子程序中,没有错乱。
以上都是裸机下的,如果用到了操作系统,而且操作系统也要管理IRQ(或者说所有的IRQ处理流程中有操作系统的代码需要运行),那以上的流程就要变一下了。
UCOS2一般是需要管理全部的IRQ中断(如果你用到的中断不会引发任务就绪队列的变化,那一般可以不被操作系统管理,但不被他管理,要注意的地方就比较多了,也比较麻烦,一般不推荐),大致流程是,0x18这块不再是用LDR     PC, [PC, #-0xff0]这样一句话了,而是先进到UCOS2的IRQ处理代码中,然后,当然,最终要进到各自的中断服务子程序也还是需要VIC的支持。如果之前在初始化外设时,在对应的VICVectAddrx中注册过,那这里就能用到了,取出VICVectAddr中的值也就是当前应该进入的中断服务子程序首地址喏。处理完后,可能还要再进到UCOS2的代码中,如果任务就绪队列中有变化的话,引发一次调度。没有的话直接返回到之前被中断的那个任务。

以上都是ARM7内核的,但是你说你用的是LM3S6911,这个不是ARM7的,是最新的ARM11之后,Cortex-M3的内核,简称CM3核,它的汇编和体系结构都和ARM7不同,我大致看过,有不同,但似乎也不是特别大,7模式简化为2个模式,但中断向量这块变化是很大的,它里面也有VIC,只是这个是更先进的NVIC,不过不同的地方至少有一点你得注意,外设中断向量入口地址是完全不同的,ARM7的都是0x18,但CM3的,假如说是Timer0,那对应的在中断向量表中有专门给他留的(具体地址不知道,启动代码中一定有的),其他的中断不能占用这个位置,Timer0产生中断后,PC会自动的跳到那里,取得对应的中断服务子程序首地址后会跳到里面去处理中断。Timer1的就是另外的地址了,据说CM3支持共256个中断,其中240个外设中断,之前在学校玩CM3和UCOS2时,改过这个地方,不是很难的(虽然当时不懂原理)。
 
 
 

回复

157

帖子

0

TA的资源

纯净的硅(初级)

5
 
  谢谢你的指点,我就是没有找到启动代码,现在我继续在找这一块!第一次搞这个,是从51转过来的!所以很多不怎么理解,想做的是基本了解清楚再说!我再看,如果不懂再向你请教,实在不行并且你有时间的话
就把程序发给你帮我瞄瞄!再次谢谢你哈!
 
 
 

回复

157

帖子

0

TA的资源

纯净的硅(初级)

6
 
谢谢,启动代码已经找到,问题大致明白了!继续学习!这个帖子以后作为我学习记录算了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表