CatST InterruptModel:中断、事件锁存与快速任务模型¶
CatST 不开放用户中断函数。STM32 中断、DMA、定时器捕获、通信接收等能力由固定 Runtime 实现,CatST 通过稳定的事件映像、高速计数器、锁存位和过程映像读取结果。
1. 设计原则¶
CatST 的主执行模型仍然是扫描周期:
中断用于 Runtime 的快速采集和协议处理,不用于执行现场 CatST 逻辑。
原则:
- CatST 用户不能声明 ISR、HAL 回调或中断子函数。
- Runtime 可以使用 EXTI、TIM、UART、CAN、Ethernet、DMA 等中断。
- ISR 内只做短小、确定、不可阻塞的工作。
- ISR 与扫描周期之间通过双缓冲、锁存位、计数器或过程映像传递数据。
- CatST 在扫描边界读取一致性快照,不直接访问中断上下文数据。
- CatST 写输出仍必须经过安全层,不能在中断中直接刷新物理输出。
2. 禁止的 CatST 能力¶
CatST 不支持:
禁止示例:
该类逻辑必须由 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 中禁止:
4. 事件映像¶
推荐 Runtime 提供以下受控资源。
4.1 L 锁存位¶
L0~L63 表示快速事件锁存位。典型用途是输入边沿、短脉冲、通信状态跳变。
语义:
- Runtime ISR 置位。
- CatST 可读。
- 清除由专用函数或扫描边界策略控制。
- 不允许 CatST 直接写任意 L 位,避免误清事件。
示例:
4.2 HSC 高速计数器¶
HSC0~HSC7 表示高速计数器,由 EXTI/TIM 在中断中计数。
可见字段:
| 字段 | 类型 | 说明 |
|---|---|---|
HSCn.CV |
DINT | 当前计数值快照 |
HSCn.OV |
BOOL | 溢出标志 |
HSCn.EN |
BOOL | 使能状态,只读 |
示例:
4.3 CAP 捕获值¶
CAP0~CAP7 表示输入捕获、脉宽或周期测量。
可见字段:
| 字段 | 类型 | 说明 |
|---|---|---|
CAPn.VALUE |
DINT | 捕获值快照 |
CAPn.VALID |
BOOL | 捕获值有效 |
CAPn.OV |
BOOL | 溢出或丢样 |
5. 扫描边界一致性¶
Runtime 必须在扫描边界复制中断数据:
要求:
- CatST 在一次扫描内看到的 L/HSC/CAP 值稳定。
- 多字节值复制必须避免撕裂读。
- 清除锁存事件不得丢失扫描期间新到事件。
- 中断与主循环共享数据必须使用原子访问、临界区或双缓冲。
6. CatST-Fast 与快任务¶
CatST-Fast 是可选能力,不等同于用户 ISR。
CatST-Fast 规则:
- 由固定定时器或 Runtime 调度,不由任意硬件中断直接调用。
- 只允许极小逻辑子集,例如 BOOL/DINT 简单表达式、固定映像读写。
- 禁止定时器、计数器、通信调用、复杂循环和动态资源。
- 必须有独立资源预算和执行时间实测。
- 不允许绕过安全层。
第一版不要求实现 CatST-Fast。需要微秒级逻辑时,优先由 Runtime 固定模块实现。
7. 推荐实现顺序¶
第一阶段:
第二阶段: