DJYOS 中断系统:实现无与伦比的实时性与便捷性

发布于:2024-06-30 ⋅ 阅读:(38) ⋅ 点赞:(0)

        在实时操作系统(RTOS)的应用场景中,对实时性的要求往往极为严格,而中断系统则是保障实时性的关键因素之一。DJYOS 以其独特的中断管理设计,实现了裸跑级别的中断延迟,为那些对实时性要求极高的应用提供了操作系统的支持。本文将深入探讨 DJYOS 的中断系统,包括中断的原理、管理体系以及使用步骤。

一、理解中断

        中断是一个异步到达的事件,CPU 无法预知其何时发生以及发生时自身的运行状态。许多 CPU 在响应中断后会自动切换到特权级别,这使得中断服务函数的行为难以控制,增加了中断系统的设计难度。不少操作系统将中断视为“需要紧急处理的事件”,这导致了中断相关代码的复杂性。然而,事实上中断并不一定是紧急事件,只有极少量的中断需要很高的实时性。因此,我们不能对所有中断一视同仁,而应该根据其实际需求进行分类处理。

二、中断管理体系

        理解了中断的本质后,我们可以着手设计中断系统。DJYOS 的中断管理体系体现了“九九加一”原则:

  1. 对于日常大量存在、实时性要求不是特别高的工作,系统提供最大的便利,使程序员能够简洁地实现。
  2. 对于极少遇到、高难度、甚至挑战系统实时性和处理能力极限的工作,系统提供最大的灵活性,使问题的解决成为可能。

基于这一原则,DJYOS 将中断分为两大类:

  1. 实时中断:对应现实世界中紧急程度非常高的中断信号,其响应与前后台系统无异,具有接近前后台系统的实时性。在操作系统运行过程中,调度程序永远不会关闭实时中断,只是提供一个接口函数,使线程可以根据需要临时关闭实时中断。在实时中断中,程序员除了不能使用操作系统的系统调用外,没有太多的束缚,相应地,操作系统为实时中断提供的服务也最少。
  2. 异步信号:对应紧急程度不是很高的中断信号,异步信号和普通事件没有实质性的差别,内核把它们等同看待。但由于硬件特性,异步信号与普通事件还是有一些区别的。例如,异步信号没有独立的上下文,故 ISR 不可以被阻塞;异步信号优先级高于所有普通事件,故其 ISR 不能像事件处理函数那样做成死循环的形式。

三、中断使用步骤

  1. CPU 中断表:在文件“djysrc\bsp\cpudrv\nameofcpu\include\cpu_peri_int_line.h”中,定义了该 CPU 支持的所有中断源,用户可直接使用。但对于一些特殊的 CPU,如 ADI 的 adsp 系列 DSP 或 TI 的 C6000 系列 DSP,由于其 CPU 支持的中断向量数少于外部中断源数,因此表中可能只能放置部分中断源。
  2. 实时中断编程模型
    • 编写中断服务程序 ISR,像普通 C 函数一样编写。
    • 使用一系列语句设置中断,包括注册中断线到中断系统、将 ISR 函数与中断线联系起来、将相应中断设置为实时中断、清除中断以及使能中断。
  3. 异步信号的事件模式编程
    • 编写事件处理函数。
    • 登记事件类型,一般设为关联型事件。
    • 按照特定指令序列初始化中断号,将事件类型与中断号联系起来、将中断号设为异步信号、设置清中断方式、清除中断以及使能中断。
    • 实现超时处理也很简单,只需将特定函数中的参数进行相应修改即可。
  4. 异步信号的 ISR 模式编程
    • 编写中断服务程序 ISR,像普通 C 函数一样编写。
    • 使用一系列语句设置中断,将 ISR 函数与中断线联系起来、将相应中断设置为异步信号中断、清除中断以及使能中断。这种方式下,ISR 可以调用全部系统服务,但中断响应延时可能比实时中断长。
  5. 异步信号的 ISR 和事件混合模式编程
    • 编写事件处理函数和中断服务代码 ISR。
    • 登记事件类型,一般设为关联型事件。
    • 按照特定指令序列初始化中断号,将事件类型与中断号联系起来、将 ISR 函数与中断号联系起来、将中断号设为异步信号、清除中断以及使能中断。此后,发生中断时会先调用 ISR 函数,然后自动弹出相应的事件。

DJYOS 中断系统的特点包括:

  1. 实时中断响应具有裸跑的实时性,使一些原本不能使用操作系统的应用能够享受操作系统的服务。
  2. 编写异步信号编程更加方便,像普通事件一样,允许使用所有操作系统服务。
  3. 系统更加简洁可靠,合并关闭调度和关闭异步信号的操作后,使系统临界区保护相关的代码大大简化。

        总之,DJYOS 的中断系统以其卓越的性能和便捷的使用方式,为实时操作系统的应用提供了强大的支持,使得开发者能够更加轻松地实现各种高实时性的应用需求。


网站公告

今日签到

点亮在社区的每一天
去签到