借用、完成与 observer 生命周期

调用方拥有请求与缓冲区存储。已接受异步 I/O 借用存储;拒绝不借用。取消、deadline 或失败 stop 都不能撤销借用。这防止 IRQ/DMA 或 executor 访问已复用内存。生命周期合同和公共操作声明定义精确上下文与结果行为。

事件

存储责任

拒绝准入

不保留 request/buffer 引用或残留硬件效果

接受准入

保持请求和缓冲区有效,直到 acquire 观察 SETTLED

Cancel 或 deadline

请求终止;继续必要进度并保留借用

DMA 完成

内存引擎阶段完成;wire/publisher 引用可能仍存在

失败排空 / QUARANTINED

保留存储与明确恢复责任

SETTLED 发布

必要引用排空后,provider 最终访问已结束

Observer/control 复用

还需 detach/drain 匹配 epoch,并 join observer

当前借用请求状态与最终结束证明义务

FIG-06 不把 REJECTED/ACCEPTED 当成请求状态枚举。Core helper 不能观察外设物理排空;provider 必须先建立证明,才能发布结束。

三种不同的完成事实

当前 UART/SPI 内存、线上与最终发布顺序

FIG-07 分开内存完成、线上完成与最终发布。UART TC 不是 NDTR 为零;SPI idle 和 CS interval 不是 DMA 中断。Release 发布 SETTLED 前,必须关闭并解除实际 IRQ/DMA/queue 引用。调用方 acquire 观察后才能取得最终 result/count。Timeout 结果只有经过这一生命周期才能最终成立,不能在 deadline 到达时直接认定。

跨任务控制与连续流

远程控制使用稳定 slot 和单调递增 epoch。不得传递另一任务能够复用存储的裸指针。释放 slot 并准备下一请求前,必须解除 control/observer 引用并 join observer。代次计数可检测过期身份,但自身不会 join 任务。

连续接收与 ADC 使用调用方显式拥有的 block loan。消费者保持 block 不可变,直到匹配 release。Producer 发布旧硬件 bank 前需要 replacement target。没有 replacement 就可见地停止/背压,绝不能覆写消费者。Stop 等待 filling、ready 和 borrowed block,而不仅是 active DMA。流合同记录 loss counter 和软件 timestamp 能证明与不能证明的范围。

当前连续 block producer、替换与借用块排空

FIG-15 包括可见 loss 和 stop/drain 责任。容量与 service-latency 预算是明确的产品输入;不能承诺任意 IRQ 延迟或消费者速度下无损。教程执行拒绝和隔离;OS 停机说明等待与 join 责任。