- 1、本文档共57页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章中断服务程序设计 中断服务程序(ISR)是嵌入式应用系统获取各种事件的基本手段,而“事件”是实时性问 题的讨论基础和时间计算的起点。ISR的设计质量直接影响到系统的实时性指标和操作系统的工作效率。 5.1 中断优先级安排 为不同的中断服务程序安排不同的优先级,在允许中断嵌套的情况下,最高优先级的中断总是能够得到及时响应。 5.1.1 中断的优先级资源 中断的优先级资源就是CPU的中断系统。以ARM7体系的CPU为例,最多可以有32个中断资源。 每个具体的中断源可以将其设定为FIQ,使其具有最高优先级,但FIQ最好是分配给唯一的中断源,否则就失去意义;也可以设定为向量IRQ,使其具有中等优先级,但向量IRQ的总数不能超过16个,这些中断源优先级的高低按向量编号从0(最高)到15(最低)排序;如果中断源的个数超过17个,则剩余的中断源只能设定为非向量IRQ,其优先级最低。操作系统本身必须使用一个定时器中断源来作为系统节拍中断,它是操作系统工作的基础。 只要没有关闭中断,中断服务程序可以中断任何任务的运行,故可以将中断服务程序看成比最高优先级(0级)的任务还要优先的“任务”。 5.1.2 中断优先级安排原则 中断源是系统及时获取异步事件的主要手段,其优先级安排原则如下: 》紧迫性:触发中断的事件允许耽误的时间越短,设定的中断优先级就越高。例如脉冲峰值数据采样时耽误的时间越短,采样结果就越真实。紧迫性为最高原则。 》关键性:触发中断的事件越关键(重要),设定的中断优先级就越高。 》频繁性:触发中断的事件发生越频繁,设定的中断优先级就越高。频繁事件的间隔时间比较短,如不及时处理有可能遗漏。 》快捷性:在前三项条件相近时,ISR处理越快捷(耗时短),设定的中断优先级就越高。在发生中断嵌套时,耗时短的ISR嵌套在耗时长的ISR里时对耗时长的ISR的完成时间影响不明显,而耗时长的ISR嵌套在耗时短的ISR里时对耗时短的ISR的完成时间影响很明显。 中断服务程序的功能应该尽量简单,只要将获取的异步事件通信给关联任务即可,后续处理交由关联任务完成。 5.2 不受操作系统管理的中断服务程序 在正常情况下,ISR应该接受操作系统的管理,因为很多任务是靠ISR触发的。但在两种情况下ISR不受操作系统管理:一种情况是没有必要;另一种情况是操作系统根本就没有对该ISR进行管理。 某些控制系统需要在掉电时将各种现场动态数据保存起来,以便下次上电时恢复原样。在这类系统中配备了掉电检测单元,在电源电压开始下降时及时触发掉电中断(配备最高优先 级),在掉电ISR中将各种现场动态数据保存起来,然后使系统进入掉电状态,只有再次复位时系统才能开始重新运行。由于掉电ISR运行之后系统不再运行任何程序,故掉电ISR没有必要受操作系统管理。 实时操作系统μc/os - II移植到ARM7体系的CPU上时,没有对FIQ进行处理,即 FIQ是不受操作系统管理的。选用FIQ来响应实时性要求最高的高速采样操作是一个有效措施,保护现场的工作量很小(FIQ专有的8个寄存器不需要保护)。在工程模板的系统启动文件Startup.s中,已经把汇编代码部分处理好了。用户只需要用C语言编写快速中断服务函数FIQ_Exception()即可,不需要考虑保护现场和恢复现场的问题。 由于没有操作系统介入,FIQ的lSR无法与关联任务进行通信,所获取的信息不能及时得到关联任务的处理,故只能以原始形式保存在一个缓冲区内,等待以后进行离线处理。其典型的例子是高速数据采集系统。 5.3 受操作系统管理的中断服务程序 实时操作系统μ/C/OS - II移植到ARM7体系的CPU上时,对IRQ进行了管理,其ISR代码的编写必须遵循一定的规则。 5. 3.1 中断服务程序的结构 受实时操作系统管理的ISR与不受实时操作系统管理的ISR有很大区别,体现在以下3个时段。 (1)进入中断:除了保护现场外,还需要调用“进入中断”服务函数,用来通知实时操作系统,使实时操作系统掌握当前中断的嵌套深度。 (2)运行功能代码:在这部分代码中,除了完成本ISR的实质功能的代码外,还包含了对系统通信服务函数的调用,实现与其他任务进行通信的功能。正是这种通信功能,使关联任务得到同步信号或数据,从而进入就绪状态。但在ISR中不允许调用延时函数和可能被挂起的系统服务函数。 (3)退出中断:必须执行实时操作系统规定的“退出中断”流程。首先根据中断嵌套深度判断被本次中断所中断的代码是“任务级”还是“中断级”,如果是“中断级”,则返回被中断的较低级的ISR;如果被中断的代码是“任务级”且不允许进行任务调度,则返回被中断的任务。 如果允许进行任务调度,且出现了比被中断的任务的优先级更高的
文档评论(0)