xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
载入中...
搜索中...
未找到
xt_task 单元测试

平台 目标
windows simulator
linux —
lm620 r4f4

覆盖 xt_task 轻量级协程模块的核心功能,基于 xt_timer2 和 xt_event(事件管理) 实现。共 **9 组 51 项测试**。

测试分组

分组 测试项数 内容
1. 基本生命周期 10 setup 幂等、start 返回句柄、is_running 状态、sys_reset 清零、任务数组满、reset 后重新执行
2. xt_task_delay 5 delay 单次/多次/零值/大值、超限 assert 阻止执行
3. xt_task_wait_event 5 publish 唤醒、永不唤醒挂起、多任务同时等待、唤醒后继续 delay、lc 跳转正确性
4. xt_task_wait_until 8 事件先于超时、超时先于事件、FOREVER 永不超时、timeout=0 立即超时、超时后迟到事件不唤醒、事件到达后定时器停止、超限 assert
5. xt_task_call_subtask 6 子任务正常完成、子任务内 delay、槽位回收、孙任务不支持 assert、父任务继续执行、两级 cleanup
6. 并发多任务 4 不同 delay 并发、不同事件并发、8 任务轮转、delay 与 event 混合执行
7. 边界与异常 5 空任务立即完成、delay 超限卡死、数组满返回 NULL、完成后的状态、reset 后重新执行
8. 定时器/事件集成 5 timer2_handler 分段推进、event_handler 唤醒任务、handler 调用顺序、无匹配任务不崩溃
9. 事件+超时竞争 3 同一 tick 内事件优先、超时前事件到达、超时先于迟到事件

预期行为

  • **任务生命周期**:xt_task_start 返回非 NULL 句柄,xt_task_is_running 反映运行状态,sys_reset 清空所有状态后可重新 setup
  • **delay 挂起/恢复**:xt_task_delay(0) 立即恢复,delay 超限触发 assert 并阻止后续执行
  • **wait_event 同步**:xt_task_wait_event 在对应事件 publish 后唤醒,param 正确传递,永不 publish 时永久挂起
  • **wait_until 超时**:支持事件+超时双重唤醒,事件先到则以事件唤醒(wake_reason=1),超时先到则以超时唤醒(wake_reason=2)
  • **call_subtask 父子协作**:子任务 yield 后父任务挂起等待,子任务完成后父任务恢复执行,槽位自动回收,不支持孙任务
  • **并发隔离**:多个 task 各自上下文独立,不同 delay 的 task 按各自时间恢复,不同事件的 task 仅匹配事件唤醒
  • **handler 调度顺序**:event_handler 和 timer2_handler 的调用顺序决定同一 tick 内事件与超时的竞争结果

编译和运行

cd tests/xt_task
xt --target windows/simulator fullclean build
xt --target windows/simulator run

注意事项

  • 测试使用自定义 tick 模式(xt_timer2_enable_custom_tick),tick 由测试代码通过 xt_tick2_inc 手动推进
  • run_until_idle 辅助函数推进 tick 直到无活跃定时器且事件队列为空,安全阀 1000 轮防死循环
  • XT_TASK_NUM 默认为 10,数组满载测试依赖此值