项目计划 — 2026年5月至8月
一、当前状态
1.1 任务清单
- [x] 核心调度器
- [x] PriorityBitmap
- [x] Executor / Spawner
- [x] 过程宏 (
#[task]#[main]#[interrupt]) - [x] 平台抽象 (QEMU virt)
- [x] Timer / TimerQueue
- [x] 集成测试 (12 个)
- [ ] 同步原语 (Mutex / Semaphore / Channel / EventGroup)
- [ ] JoinHandle / CancellationToken
- [ ] 周期定时器 / 超时包装
- [ ] 多平台 (ARM / VF2)
1.2 与 embassy_preempt 的关系
embassy_preempt_VisionFive2 是本项目的前身,已在 VF2 上验证了:
- 抢占式调度 + 共享栈的可行性
- AMP 异构多核架构(S7 实时核 + U74 通用核)
- 核间通信(IPI + 共享内存)
rt-async 在此基础上重新设计了调度内核,目标是更简洁的架构和更好的可移植性。
二、八月目标
一个可用的实时内核,具备完整的同步、通信和任务管理能力:
┌──────────────────────────────────┐
│ 应用层 (apps/) │
│ Rust async task │
├──────────────────────────────────┤
│ 系统服务层 │
│ Mutex / Sem / Channel / EventGrp │
│ Timer / Timeout / Periodic │
│ JoinHandle / CancellationToken │
├──────────────────────────────────┤
│ 调度内核 │
│ Spawner + Executor + Bitmap │
│ 共享栈 + 优先级抢占 │
├──────────────────────────────────┤
│ HAL / 驱动层 │
│ QEMU virt / JH7110 / ARM Cortex-M│
└──────────────────────────────────┘三、开发计划
原则:每个功能完成后立即补充对应测试,不做集中测试阶段。
阶段一:同步原语
补齐内核最基本的同步和通信机制。
- [ ]
Mutex<T>— 支持优先级继承的异步互斥锁- [ ]
MutexGuardRAII 自动释放 - [ ] 等待队列按优先级排序
- [ ] 释放时恢复原始优先级并唤醒等待者
- [ ] 测试:
mutex.rs - [ ] 测试:
priority_inversion.rs(验证优先级继承)
- [ ]
- [ ]
Semaphore— 计数信号量- [ ]
acquire().await/release(n) - [ ]
SemaphorePermitRAII 守卫 - [ ] 测试:
semaphore.rs
- [ ]
- [ ]
Channel— MPSC 通道- [ ] intrusive linked list,零堆分配
- [ ] 容量 0 = rendezvous 模式
- [ ] 测试:
channel.rs
- [ ]
EventGroup— 32-bit 事件位- [ ]
wait(mask, Any|All).await/set(bits) - [ ] 测试:
event_group.rs
- [ ]
交付物:modules/executor/src/sync/
阶段二:平台扩展
- [ ] HAL 层重构
- [ ] 拆分
Chiptrait 为Console/Interrupt/Timer/InterruptController - [ ] 新建
modules/hal/+modules/drivers/ - [ ] RISC-V 公共层:CLINT / CSR / trap 处理
- [ ] 回归测试:现有 QEMU 测试全部通过
- [ ] 拆分
- [ ] VisionFive2 (JH7110) 驱动
- [ ] CLINT 定时器 + 软件中断
- [ ] UART 控制台
- [ ] GPIO 基本读写
- [ ] PLIC 外部中断
- [ ] 链接脚本 + M-mode 启动代码
- [ ] 测试:VF2 上运行 demo 验证
阶段三:任务与时间管理
完善 task 生命周期和定时器能力。
- [ ]
JoinHandle<T>— spawn 返回可 await 的句柄- [ ]
TaskStorage增加 result slot + join waker - [ ]
JoinHandle实现Future<Output = T> - [ ] 测试:
join_handle.rs
- [ ]
- [ ]
CancellationToken— 协作式任务取消- [ ]
cancel()请求取消(Queued/Waiting 立即生效,Running 等 await 点生效) - [ ]
cancelled().awaittask 内主动检查 - [ ]
TaskInfo增加 cancel flag - [ ] 测试:
cancel_token.rs
- [ ]
- [ ]
PeriodicTimer—every(duration)周期触发- [ ] 测试:
periodic_timer.rs
- [ ] 测试:
- [ ]
with_timeout(dur, future)/with_deadline(instant, future)- [ ] 测试:
timeout.rs
- [ ] 测试:
- [ ]
TimerQueue改进:支持取消已注册定时器 - [ ]
Instant/Duration类型完善
交付物:modules/futures/src/{cancel, timeout, timer}.rs