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

平台 目标
windows simulator
linux —
lm620 r4f4

覆盖 xt_timer2 v2.1 软件定时器模块的全部 17 个 API,共 **12 组 58 项测试**。

测试分组

分组 测试项数 内容
1. remain 3 过期返回 0、未来返回正数、精确边界匹配
2. setup 5 字段设置、{0} 初始化、覆盖、NULL t/cb assert
3. new/delete 6 new 返回非空、start 触发、字段正确、stop 后 delete、运行中 delete、delete 后 handler 安全
4. start 7 返回 OK、timeout 超限、零值立即触发、restart 重调度、NULL cb/t 和超限 assert
5. stop 4 阻止触发、幂等、未初始化拒绝、NULL assert
6. is_running 4 start 后 true、stop 后 false、到期后 false、NULL 返回 false
7. handler 基本 5 到期触发、未到期跳过、返回 next_timeout、空表返回 MAX、timeout=0 触发
8. set_cb / set_user_data 6 修改回调、修改 user_data(含 NULL)、NULL t/cb 和 NULL t 的 assert
9. 回调中操作 self 6 delete(self)、start(self)、stop(self)、setup(self)、set_cb(self)、start(self, 0)
10. 跨回调 + 多定时器 6 delete(other)、start(other)、stop(other)、同时到期、不同时到期、next_timeout
11. 其他 2 remain 回绕安全、INT32_MAX 合法
12. 系统管理 4 sys_reset 清空链表和 tick、sys_setup 内存池分配和禁用

预期行为

  • **remain 回绕安全**:使用有符号差值 (int32_t)(timeout_tick - now) 计算剩余 tick,32-bit tick 计数器回绕时结果仍然正确
  • **handler 三阶段**:阶段1 快照收集已到期节点,阶段2 遍历快照调用回调,阶段3 重新计算最小剩余 tick
  • **回调中 self 操作**:delete(self) 安全(先摘后调,快照不受影响),start(self) 重新挂链,setup/set_cb 仅改字段
  • **回调中 other 操作**:delete/start/stop 跨定时器操作安全,working/fire_snap 双链表机制保证遍历一致性
  • **多定时器调度**:同一 timeout 的全部触发,不同 timeout 的逐一按序触发,handler 返回最早剩余 tick 供调用者休眠
  • **系统管理**:sys_reset 清空工作链表并归零 tick,sys_setup 可注册内存池或禁用

编译和运行

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

注意事项

  • 测试使用自定义 tick 模式(xt_timer2_enable_custom_tick),tick 由测试代码通过 xt_tick2_inc 手动推进
  • setUp 中禁用内存池(sys_setup(NULL, 0))确保测试隔离,new 走 xt_calloc
  • run_handler_until_idle 辅助函数推进 tick 直到无活跃定时器,安全阀 200 轮防死循环