首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于μC/OS-II的中断下半部设计方案 05

基于μC/OS-II的中断下半部设计方案 05

μC/OS—II版本号为2.85。用处理器内部的定时器在调试环境下进行时间测试,因为调试环境下可以通过设置断点,快速、准确地查看定时器的当前值。

  测试方法:使用中断下半部对一个中断服务的典型应用进行修改,分别测试修改前和修改后的中断响应中关闭中断的时间,并对比关闭中断时间来说明实时性。
  3.2 测试中断下半部屏蔽中断的时间
  主要函数屏蔽中断的时间如表1所列。



  从表1可以看出,在中断下半部入口函数OSIntExit()中所增加的代码给内核增加了约6.2μs的关中断时间,中断下半部管理函数OSDoSirq()给内核增加了约3.5μs的关中断时间,中断下半部出口函数OSSirqExit()屏蔽中断的时间约为4.4μs。经过计算,一次完整的中断下半部处理增加了约14.1μs的关中断时间。
  3.3 测试中断下半部缩短中断关闭的时间
  Uart_Printf()为常用的串口打印函数,其常用于满足特定条件时通过串口打印信息。很多开发者喜欢在中断服务程序中使用它,所以,仅仅包含一句Uart_Printf()的中断服务程序,可以被认为是一个普遍而简单的应用。下面给出针对只包含一句Uart_Printf()的中断服务程序进行测试的结果。
  中断上半部除设置中断相关寄存器指令外,仅包含一条Uart_Printf(“real-time test\n”),其通过串口发送一串字符。通过S3C44BOX内部定时器测试得到,CPU从中断触发到回到任务空间继续执行所花的时间为970μs,在这段时间内所有中断都被屏蔽。
  若在中断服务程序中使用OSRegSirq()注册softirq,将Uart_Printf(“real—time test\n”)转移到中断的下半部执行,这时从中断发生到回到任务空间继续执行所花的时间为990 μs。总的运行时间虽然增加了20μs;但在此过程中,中断仅仅被屏蔽了30.6μs,剩下的959.4μs时间里,所有的中断屏蔽都被开启。可见,将一句简单的Uart_Printf(“real—time test\n”)移到中断下半部执行就能够节省939.4μs的中断屏蔽时间。
  3.4 测试结果分析
  通过以上的测试结果可以看出:中断下半部为μC/0S-II内核带来的负担极小,一次完整的中断上/下半部处理时间延长了约20μs,而关中断时间增加了约14.1μs;通过测试一个简单而普遍的中断服务应用,并采用中断下半部实现,缩短了中断关闭时间约939.4μs,这相当于94.9%的中断响应的总耗时。如果粗略地以中断屏蔽时间来衡量系统的实时性,这个测试中,使用中断下半部将实时性提高了约32倍。若对更加复杂的中断服务程序使用这种机制来进行设计,则实时性的提高将更为显著。因此,采用中断下半部将极大地缩短中断服务处理中屏蔽中断的时间,这对于实时系统的意义不言而喻。
  结 语
  中断上/下半部的层次化处理机制为开发者提供了一种灵活、便捷的中断服务程序的设计方法。通过合理利用中断下半部,中断上半部的执行时间将明显缩短,中断被屏蔽的时间也会大大减少,处理器可以更快地响应中断,从而将大大减小丢失中断信号的可能性。
  本设计实现了基于μC/OS-II的中断下半部。这种机制的实现充分利用了μC/0S—II的现有资源,代码简洁而高效,且与平台相关性代码极少,方便移植。一组功能定义明确的API极大地方便了开发者使用这种机制。通过在arm7处理器上的测试表明,这种机制极大地改良了原μC/OS—II内核简陋的中断处理方式,给μC/OS—II内核带来的负担极小,却能为使用μC/OS—II的开发者带来极大的益处,对于嵌入式系统整体实时性的提高具有重要意义。
返回列表