7 Alarm
7.1 General
操作系统提供处理重复事件的服务。这些事件可能是,例如,提供定期中断的timer,或轴(凸轮轴或曲轴)的角度不断变化的情况下产生中断的编码器,或其他常规应用程序特定的触发器。OS提供了两个阶段的概念来处理此类事件。重复发生的事件(源)由具体实现特定的计数器记录。操作系统软件通过计数器向应用软件提供Alarm机制。
7.2 计数器
计数器由计数器值(以“ticks”度量)和一些特定于计数器的常数表示。
操作系统没有提供标准的API来直接操作计数器。
操作系统负责在计数器溢出时管理Alarm的必要操作,以及计数器如何溢出。
操作系统提供了至少一个来自(硬件或软件)计时器的计数器。
7.3 Alarm管理
操作系统提供激活task、设置事件、告警超时回调等服务。警报回调例程是应用程序提供的一个短函数。
当达到预定义的计数器值时,警报将触发。该计数器值可以相对于实际计数器值(相对告警)定义,也可以定义为绝对值(绝对告警)。例如,当接收到一些定时器中断时,当到达一个特定的角度位置时,或者当接收到一条消息时,警报可能会触发。
告警可以定义为单个告警,也可以定义为循环告警。同时,操作系统还提供了告警取消、告警当前状态获取等服务。
一个计数器可以连接多个警报。
Alarm在系统生成时静态产生:
- 1个计数器;
- 和1个task或一个报警回调程序。
根据配置,该告警回调例程应被调用,或该task应被激活,或在告警触发时为该task设置一个事件。运行报警回调例程时应该禁用二类中断。表4列出了告警回调例程中允许的系统服务。当告警触发时,task激活和事件设置与普通task激活和事件设置具有相同的属性。计数器和告警是静态定义的。将告警分配给计数器,以及在告警触发时执行的操作,也是静态定义的。
动态参数为告警触发时的计数器值,以及循环告警的周期。
7.4 告警回调例程
告警回调例程既不能有参数也不能有返回值。
报警回调例程应采用以下格式:
警报回调例程的处理级别是被调度器,或isr使用的级别,具体取决于实现。
8 Messages
为了使具体实现一致,应提供处理器内部通信的message处理。所需的最低功能是ISO 17356-4所述的CCCA。CCCB是唯一另一个可接受的,因为它是CCCA的超集。
如果一个实现提供了在ISO 17356-4中描述的其他一致性类中指定的甚至更多的功能,则该实现应坚持相应的ISO 17356-4功能的语法和语义。
请注意,对于message,ISO 17356-4规定的规则是有效的。具体的需要查看 ISO 17356-4,目前没有使用,可以不需要关心。