跳转至

CatST InterruptModel:中断、事件锁存与快速任务模型

CatST 不开放用户中断函数。STM32 中断、DMA、定时器捕获、通信接收等能力由固定 Runtime 实现,CatST 通过稳定的事件映像、高速计数器、锁存位和过程映像读取结果。


1. 设计原则

CatST 的主执行模型仍然是扫描周期:

采样输入
复制稳定映像
执行 UserLogic_Scan()
安全处理
刷新输出

中断用于 Runtime 的快速采集和协议处理,不用于执行现场 CatST 逻辑。

原则:

  1. CatST 用户不能声明 ISR、HAL 回调或中断子函数。
  2. Runtime 可以使用 EXTI、TIM、UART、CAN、Ethernet、DMA 等中断。
  3. ISR 内只做短小、确定、不可阻塞的工作。
  4. ISR 与扫描周期之间通过双缓冲、锁存位、计数器或过程映像传递数据。
  5. CatST 在扫描边界读取一致性快照,不直接访问中断上下文数据。
  6. CatST 写输出仍必须经过安全层,不能在中断中直接刷新物理输出。

2. 禁止的 CatST 能力

CatST 不支持:

INTERRUPT
ISR
ON_RISING
ON_UART_RX
ON_TIMER
HAL 回调函数
中断优先级配置
NVIC 配置
DMA 配置
直接读写中断标志位

禁止示例:

INTERRUPT EXTI0 DO
    Y0 := TRUE;
END_INTERRUPT;

该类逻辑必须由 Runtime 固定实现,然后通过变量区或功能块暴露给 CatST。


3. Runtime 中断职责

Runtime ISR 可以处理:

中断来源 Runtime 职责 CatST 可见形式
DI 边沿 EXTI 锁存边沿、计数、时间戳 L 锁存位、HSC 高速计数器
TIM 捕获 脉宽、周期、频率测量 CAP 捕获值
TIM 更新 快任务节拍、PWM 更新 状态变量或固定输出模块
UART/RS485 DMA 接收缓冲、帧边界检测 通信过程映像、S/E 状态
CAN/CANopen 接收 PDO/状态字 通信过程映像
Ethernet/EtherCAT DMA 收发和协议任务唤醒 通信过程映像

ISR 中禁止:

执行 UserLogic_Scan()
调用 CatST 生成逻辑
长时间循环
阻塞等待通信
动态内存
直接绕过安全层写物理输出
复杂协议解析,除非已证明实时预算

4. 事件映像

推荐 Runtime 提供以下受控资源。

4.1 L 锁存位

L0~L63 表示快速事件锁存位。典型用途是输入边沿、短脉冲、通信状态跳变。

语义:

  1. Runtime ISR 置位。
  2. CatST 可读。
  3. 清除由专用函数或扫描边界策略控制。
  4. 不允许 CatST 直接写任意 L 位,避免误清事件。

示例:

IF L0 THEN
    M0 := TRUE;
END_IF;

4.2 HSC 高速计数器

HSC0~HSC7 表示高速计数器,由 EXTI/TIM 在中断中计数。

可见字段:

字段 类型 说明
HSCn.CV DINT 当前计数值快照
HSCn.OV BOOL 溢出标志
HSCn.EN BOOL 使能状态,只读

示例:

IF HSC0.CV >= D0 THEN
    Y0 := TRUE;
END_IF;

4.3 CAP 捕获值

CAP0~CAP7 表示输入捕获、脉宽或周期测量。

可见字段:

字段 类型 说明
CAPn.VALUE DINT 捕获值快照
CAPn.VALID BOOL 捕获值有效
CAPn.OV BOOL 溢出或丢样

5. 扫描边界一致性

Runtime 必须在扫描边界复制中断数据:

ISR 写 active buffer
扫描开始临界区短暂交换或复制
CatST 读取 scan snapshot
扫描结束按策略清除已消费锁存

要求:

  1. CatST 在一次扫描内看到的 L/HSC/CAP 值稳定。
  2. 多字节值复制必须避免撕裂读。
  3. 清除锁存事件不得丢失扫描期间新到事件。
  4. 中断与主循环共享数据必须使用原子访问、临界区或双缓冲。

6. CatST-Fast 与快任务

CatST-Fast 是可选能力,不等同于用户 ISR。

CatST-Fast 规则:

  1. 由固定定时器或 Runtime 调度,不由任意硬件中断直接调用。
  2. 只允许极小逻辑子集,例如 BOOL/DINT 简单表达式、固定映像读写。
  3. 禁止定时器、计数器、通信调用、复杂循环和动态资源。
  4. 必须有独立资源预算和执行时间实测。
  5. 不允许绕过安全层。

第一版不要求实现 CatST-Fast。需要微秒级逻辑时,优先由 Runtime 固定模块实现。


7. 推荐实现顺序

第一阶段:

Runtime 固定中断
输入边沿锁存 L0~L15
HSC0~HSC1
扫描边界快照
CatST 只读访问
测试覆盖事件不丢失

第二阶段:

CAP 捕获
更多 HSC
通信过程映像事件
锁存清除函数
CatST-Fast 评估