- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.4 小结 1. 在uC/OS-II中,中断服务子程序运行结束之后,系统将会根据情况进行一次中断级的任务调度去运行优先级更高的就绪任务,而不一定要接续运行被中断的任务。 2. uC/OS-II的中断允许嵌套,用全局变量OSIntNesting来记录中断的嵌套数。 3. uC/OS-II的中断服务程序的工作通常是由中断激活的一个任务来完成的。这样的优点是可以使应用程序的设计更为灵活。4. 在任务中可以用设置临界区的方法来屏蔽中断。设置临界区的宏有3种实现方法。5. uC/OS-II的时钟通常是一个由硬件计数器定时产生周期性中断信号来实现的,每一次中断叫做一个节拍,其中断服务程序叫做节拍服务程序。6. uC/OS-II在每一个节拍服务里要遍历系统中的全部任务的任务控制块,把其中记录任务延时时间的成员OSTCBDly减1,并使延时时间到的任务进入就绪态。7. uC/OS-II有10个函数提供了钩子函数,应用程序设计人员可以在钩子函数中编写一些自己的代码。8. 在uC/OS-I进行时间管理的函数中,最重要的是延时函数OSTimeDly()和I OSTimeHMSM()。他们的作用不仅仅是使任务的运行停止并等待一段时间,更重要的是,他们都要调用任务调度器进行一次任务调度,这样就使低优先级别的任务有了运行的机会。 术语 缩语、术语 英文全称 解 释 ISR Interrupt service routines 中断服务程序 * * 中断是计算机系统处理异步事件的重要机制。当异步事件发生时,事件通常是通过硬件向CPU发出中断请求的。在一般情况下,CPU响应这个请求后会立即运行中断服务程序来处理该事件。 为了处理任务延时、任务调度等一些与时间有关的事件,任何一个计算机系统都应该有一个系统时钟。与其他计算机系统一样,uc/os-ii的时钟是通过硬件定时器产生定时中断来实现的。 * 中断响应过程:系统接收到中断请求后,如果这时CPU处于中断允许状态(及中断是开放的),系统就会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序运行结束后,系统将会根据情况返回到被终止的任务继续运行,或者转向运行另一个具有更高优先级的就绪任务。 uc/os-ii系统允许中断嵌套,即高优先级的中断源的中断请求可以中断低优先级的中断服务程序的运行,为记录中断嵌套的层数,uc/os-ii定义了一个全局变量OSIntNesting。 * 在编写uc/os-ii的中断服务程序时,要用到两个重要的函数OSIntEnter()和OSIntExit()。 函数OSIntEnter()比较简单,它的作用就是把全局变量OSIntNesting加1,从而用它来记录中断嵌套的层数。函数OSIntExit()经常在中断服务程序保护被中断任务的断点数据之后,运行用户中断服务代码之前来调用。 另一个在中断服务程序中要调用的函数叫做退出中断服务函数OSIntExit()。从图4-2可以看到,这个函数在中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下将要进行任务切换,否则就返回被中断的服务程序。 * 中断时的栈空间使用量是随中断嵌套的深度而不断增加的,是不确定的,一般方法是定义一个充分大的栈空间,使之不会溢出。但为每个任务都定义一个充分大的栈空间,会导致栈空间的浪费。如果将中断栈区独立出来,单独为它定义一个较大的空间,这样,就可大大减少栈空间的浪费,减少对内存的需求。实际上,这是可行的。在μC/OS-II中,内核为中断嵌套的层数定义了一个全局变量OSIntNesting。系统在进行任务调度时,先要判断OSIntNesting是否为0,如果OSIntNesting不为0,则不进行任务切换。也就是说:在OSIntNesting为1(当前只有一个中断,并且没有嵌套中断)时,如果发生了嵌套的中断(不管嵌套的层数有多深),那么所有嵌套的中断一层一层地都返回,直到OSIntNesting再次为1时止,任务栈是不会切换的,栈指针始终在同一个任务的栈空间中变化。因而,可以为中断嵌套单独定义一个中断嵌套栈。在发生第1次中断时,中断服务程序将栈空间切换到中断嵌套栈,这样,以后发生的嵌套中断就一直使用这个栈空间。在中断返回到第1次中断时,即OSIntNesting为1时,中断服务程序再从中断嵌套栈切换回任务栈。这样就实现了中断任务的切换,减少了内存需求。 * uc/os-ii在运行完中断服务程序后,并不一定返回到被中断的任务上去,而是要进行一次任务调度来决定是返回被中断的任务还是运行一个具有更高优先级的就绪任务,因此系统需要一个中断级任务调度器。 从图4-2的函数OSIntExit()流程图及其源代码中已经
您可能关注的文档
- 第4章常用概率分布研讨.ppt
- 第4章查询与视图2研讨.ppt
- 第4章查询和视图研讨.ppt
- 第4章操作系统安全研讨.ppt
- 第6章曲线和曲面研讨.ppt
- 汽车检测与诊断研究.docx
- 聚丙烯酰胺研究.docx
- 第4章布线器材与施工工具研讨.ppt
- 汽车金融服务概述研究.docx
- 第6章清热中成药研讨.ppt
- 金融与投资行业2025研究报告:金融科技在智慧城市建设中的核心地位与挑战.docx
- 饮料行业2025年新型甜味剂法规监管下的市场趋势与法规政策调整前瞻报告.docx
- 2025年教育直播平台在线教育平台政策法规与行业规范研究报告.docx
- 艺术市场数字化交易市场政策法规与行业自律研究报告.docx
- 2025年环境保护公众参与机制优化与生态环境保护政策实施报告.docx
- 2025年高速公路智能交通系统与智能交通监控与检测技术研究报告.docx
- 2025年消费与零售行业儿童教育用品市场消费趋势及消费者行为分析报告.docx
- 2025年农业新型经营主体农村电商发展路径研究报告.docx
- 疫情后线下演出市场恢复力评估与发展趋势预测报告.docx
- 教育信息化0下教学工具与翻转课堂模式的结合与应用报告.docx
文档评论(0)