正确等待并停止显式 owner¶
选择可选 Native、FreeRTOS 或 ThreadX adapter 的应用使用本指南。应用拥有任务、栈、通知、队列和执行进度。裸机没有调度器。平台启动从不启动内核。OS 合同保持权威。
避免丢失完成和无限等待¶
以请求的锁存谓词为权威。先检查完成谓词,调用 arm 快照通知序列,再次检查,以同一绝对单调截止时间等待,然后再次检查。唤醒只是提示,可能合并或与当前请求无关。超时后执行合同要求的最后一次谓词观察。不得在每次提示后重新开始相对时间预算,也不得阻塞唯一负责推进的执行者。
FIG-08 表示当前 wait/唤醒责任。提供者 IRQ 接收端必须遵守选定内核系统调用优先级阈值;不合法优先级不得调用 ISR 内核 API。ThreadX 有自己复核的 M4/Native 子集和屏蔽策略,不继承 FreeRTOS 端口或 tickless/isolation 能力集。
按依赖顺序停机¶
关闭客户端准入,不借用地拒绝新工作。
保持资源 owner/执行者运行。通过稳定槽与匹配 epoch 请求取消;取消不释放已接受的存储。
排空传输和块借用。Acquire 观察 SETTLED 并读取结果。失败排空保留 QUARANTINED 存储和明确恢复责任。
复用槽或请求前,join 生产者并 detach/join 控制观察者。
停止并 join owner。销毁通知、队列、临界区保护、栈或 TCB 存储前,确保硬件 IRQ 发布者停止访问并完成必要同步。
只有选定生命周期与内核时钟/Tick 所有权允许时才能停止 platform 提供者。普通 I/O 拆除不停止正在运行的调度器。
任务返回后的实现因后端而异:
后端 |
应用入口返回后的行为 |
外部所有者必须证明 |
|---|---|---|
Native |
pthread 入口返回,主机线程终止 |
|
FreeRTOS |
包装任务发布完成提示,然后挂起,直到外部 join 调用方将其删除 |
|
ThreadX |
包装任务发布返回谓词和完成提示,然后进入内核完成路径 |
|
入口函数返回或观察到完成提示,都不允许回收栈/TCB。必须保留包装对象、栈和内核控制存储,直到唯一的外部生命周期所有者成功 join。原始队列和可关闭队列的生命周期合同不同;关闭不等于销毁。失败路径保留全部存储,只能由真实所有者重试清理。
执行维护中的软件夹具¶
先准备固定源码与递归依赖。然后从该仓库根目录、在主机构建工具可用的条件下执行:
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
两个可执行文件都必须实际执行非空且全部通过的用例。此定向开发范围不替代完整 TDD 门禁。nexus-examples 的外部 UART owner 应用提供产品执行任务;声明消费工程执行前必须记录其固定源码版本。
物理调度器上下文、IRQ 优先级阈值、FP/MVE 保留、栈峰值和唤醒延迟需要真实工位证据。不得将 POSIX 行为继承为 MCU 时序。