OSEK中断管理

1 OSEK中断分类

        如图1所示,OSEK将中断服务函数(Interrupt Service Routine,ISR)分为两类:

        ① 一类中断服务函数(ISR category 1)

        该类ISR不会使用OS提供的系统服务(不包括那些中断使能除能的相关接口,毕竟OS只是封了层皮,本质上还是调用MCU提供的指令接口,一般是通过修改一些中断屏蔽寄存器来实现),中断处理完成后会返回程序被打断的指令处执行。

        显然,一类中断与任务管理无关,与OS井水不犯河水,开销也比较小。换句话说,一类中断完全生活在OS层以下,OS完全感知不到它的存在。

        ② 二类中断服务函数(ISR category 2)

        二类ISR完全生活在OS的统治下,由OS为用户层例程(user routine)提供中断服务帧(ISR-frame),作为运行环境。在系统生成(初始化)时,该用户例程会被分配给中断,用于中断处理。

         简单来说,二类中断的ISR的触发虽还是由硬件控制,但其ISR必须由OS来指定,多了个话事人。

f59061aa772849f99020a72254cc28ab.png

图1 OSEK ISR分类 

        而在freeRTOS中,以宏变量configMAX_SYSCALL_INTERRUPT_PRIORITY为分界线,将外部中断通过优先级分为两类,较低优先级的中断可以使用OS的接口,反之则不可用。其主要原因就是,OS的很多临界区保护的实现都是通过基础优先级寄存器(BASEPRI),以提高系统可执行优先级来实现的(屏蔽了低优先级的中断请求),以至于OS的接口不可在优先级高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断中使用。

     总的来看,OSEK和freeRTOS中的中断分类方法应该是师出同门,在关于系统服务的使用上步调一致,但又都自成一家。

2 OSEK中断行为分析

        在ISR执行时,不会发生任务重调度;但当二类中断执行完毕且当前无中断发生的情况下,如果有有高优先级任务被唤醒(进入就绪态),则退出中断后即会触发重调度(rescheduling)。

        简单来说,二类中断的中断返回处是一个系统调度点,OS会检查是否有高优先级任务抢占当前的较低优先级任务;如果发生任务抢占,则进行任务上下文切换。

        由于中断优先级的最大级数以及中断的调度(激活、抢占等)等机制,都与硬件实现强相关,OSEK并未对其有明确的规定和限制。也就是说,中断和任务都可以通过优先级来执行抢占策略,但中断的调度是由硬件保证的,而任务的调度是由OSEK来执行的

        显然,中断的优先级要比任务高;如果中断种激活了一个任务(使之进入就绪态),任务的调度(使该任务进入运行态)则是在所有中断处理完成后,由OSEK来执行的。

3 中断服务函数(Interrupt service routines,ISR)

3.1 中断嵌套(Nested interrupts of different categories)

        如前文所述,中断的优先级始终高于任务。通常来说,可以在二类中断种调用系统接口,如ActivateTask()SetEvent()触发OS的重调度(新唤醒的任务优先级比当前运行态的任务优先级更高的情形下)。

        另一方面,当中断嵌套的情形发生时,尤其当二类中断抢占了一类中断时,如果在二类中断种调用了系统接口(如图2所示),而二类中断处理返回后进入一类中断的处理。随后进入被抢占的一类中断的处理过程,在其处理完成后,必须避免无法唤醒OS进行重调度的情况;否则,必须等到下一次系统重调度的时机,这无疑是实时系统无法接受的。

fc8c22f7d33845869bee19f8bbf342fe.png

图2 中断嵌套示意图 

        有一个简单易行的经验法则,即如果一类中断的优先级不低于二类中断,可以在解决上述问题的同时,最大限度地保证软件的可移植性。显然,这一方法直接阻断了二类中断抢占一类中断的可能性,但灵活性欠佳,对软件设计造成了额外的约束。

        在ARM V7的硬件环境下,通常采用可悬起中断(PendSV)来解决这一问题,即将PendSV的优先级设置为最低,并在其ISR中进行任务重调度后的上下文切换。由于PendSV可pending,即先悬起,可以先挂个号,等待其他中断处理完成后再执行。显然,这是一个更好的解决方案。

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OSEK(Open Systems and the Corresponding Interfaces for Automotive Electronics)是一种用于嵌入式汽车电子系统的操作系统标准。OSEK直接网络管理(NM)规范则是OSEK标准中的一个重要组成部分。 OSEK NM规范定义了一种网络管理方案,它允许车辆内部的电子控制单元(ECU)通过网络进行通信和相互协调。该规范确保了车辆中的不同ECU之间的安全通信和数据传输。 OSEK NM规范的主要目标是实现以下几个方面: 1. 确保在车辆网络中的ECU之间的通信具有高可靠性和实时性。车辆的不同ECU需要通过网络传输数据和命令,例如引擎控制模块、制动系统和信息娱乐系统等。NM规范定义了一套协议和机制,以确保数据传输的及时性和准确性。 2. 提供车辆网络的安全性和保密性。车辆中的ECU可能涉及到敏感的操作和数据,例如车辆的启动和安全监测等。NM规范通过加密、认证和访问控制等机制,防止未经授权的访问和干扰。 3. 支持车辆内部的故障检测和诊断。NM规范定义了一套诊断机制,用于发现和诊断车辆网络中的故障。通过这些机制,ECU能够根据定义好的规则和条件及时发出故障警报,并通过网络发送给维修人员。 总之,OSEK直接网络管理(NM)规范是一个重要的标准,帮助在嵌入式汽车电子系统中有效管理和组织车辆网络。它确保了车辆内部的各个ECU之间的通信安全可靠,并提供了故障诊断和保密性等功能。这些功能使得车辆的电子系统能够更好地工作和协调,提高了整车的性能和安全性。 ### 回答2: OSEK直接网络管理(NM)规范是一种实时操作系统(RTOS)的标准,旨在管理车辆电子系统之间的通信和网络连接。其主要目的是确保系统之间的实时数据和命令传输,并提供对网络故障的监控和诊断。 OSEK NM规范定义了许多关键概念和功能,用于实现车辆电子系统的网络管理。其中包括节点管理、网络管理和错误管理功能。 节点管理功能主要负责识别和控制节点之间的通信。每个节点都有自己的唯一标识符和状态,并通过通信通道与其他节点进行数据交换。节点管理功能确保节点之间的通信按照预定的规则进行,以确保数据的正确传输和处理。 网络管理功能负责监控和控制整个网络的状态。它可以检测和处理节点之间的故障,例如通信通道的中断或连接问题。网络管理功能还可以提供诊断信息,以帮助识别和解决网络故障。 错误管理功能用于跟踪和处理网络中发生的错误。它可以记录错误事件,并提供错误处理策略,例如重试或切换到备用通信通道。错误管理功能可以帮助系统快速恢复正常运行,以减少故障对整个车辆电子系统的影响。 通过遵循OSEK NM规范,车辆电子系统可以实现高效的网络管理。它提供了标准化的方法和接口,使不同供应商提供的设备和系统可以无缝地集成在一起。这有助于降低开发和集成的成本,并提高整个车辆电子系统的可靠性和性能。 最后,OSEK NM规范在汽车工业中得到了广泛的应用和采用。许多汽车制造商和供应商都使用这个标准来实现他们的车辆电子系统,以满足实时数据传输和网络管理的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值