正确等待并停止显式 owner

选择可选 Native、FreeRTOS 或 ThreadX adapter 的应用使用本指南。应用拥有 task、stack、notification、queue 和执行进度。Baremetal 没有 scheduler。平台 start 从不启动 kernel。OS 合同保持权威。

避免丢失完成和无限等待

以请求锁存的 predicate 为权威。检查完成 predicate,arm notification sequence,再检查,以同一 absolute monotonic deadline 等待,随后再次检查。Wake 只是提示,可能合并或无关。Timeout 后执行合同要求的最终 predicate 观察。不得每次 hint 后重启相对预算,也不得阻塞唯一需要推进的 executor。

Predicate、wake 与显式停机责任

FIG-08 表示当前 wait/wake 责任。Provider IRQ sink 必须遵守选定 kernel syscall ceiling;不合法 priority 不得调用 ISR kernel API。ThreadX 有自己复核的 M4/Native 子集和 masking policy,不继承 FreeRTOS port 或 tickless/isolation 能力集。

按依赖顺序停机

  1. 关闭 client admission,不借用地拒绝新工作。

  2. 保持资源 owner/executor 运行。通过稳定 slot 与匹配 epoch 请求取消;取消不释放 accepted 存储。

  3. 排空 transfer 和 block loan。Acquire 观察 SETTLED 并读取结果。失败排空保留 QUARANTINED 存储和明确恢复责任。

  4. 复用 slot 或 request 前,join producer 并 detach/join control observer。

  5. 停止并 join owner。销毁 notification、queue、guard、stack 或 TCB 存储前,确保硬件 IRQ publisher 停止访问并完成必要同步。

  6. 只有选定 lifetime 与 kernel clock/Tick ownership 允许时才能 stop platform provider。普通 I/O teardown 不停止正在运行的 scheduler。

返回的 adapter task 保持 parked,直到其唯一外部 lifecycle owner join。Entry function 返回不允许回收 stack/TCB。Raw queue 与 closable queue 具有不同 lifecycle contract;close 不是销毁。失败路径保留所有存储,仅由真实 owner 重试 cleanup。

执行维护中的软件夹具

从仓库根目录执行:

python tools/dev/dev.py configure --preset native-debug
python tools/dev/dev.py build --preset native-debug --parallel 4     --target nexus_os_wait_test nexus_uart_owner_mock_test
build/native-debug/bin/nexus_os_wait_test
build/native-debug/bin/nexus_uart_owner_mock_test

两个 binary 都必须完成非空的通过用例。这一 targeted development scope 不替代完整 TDD gate。nexus-examples 的外部 UART owner 应用提供产品 workers;声明 consumer 执行前必须记录其 pin/revision。

物理 scheduler context、IRQ ceiling、FP/MVE 保留、stack 峰值和 wake latency 需要真实 station 证据。不得将 POSIX 行为继承为 MCU 时序。