/* 时钟的假实现:虚拟时钟,delay 只是把时间往前拨,不真的睡。 所以 A9 那种「17 ms 上电时序」的场景测试跑起来是零耗时的。 */ #include "sim_hal.h" static uint64_t s_now_us; static uint32_t s_delay_calls; void sim_time_reset_internal(void); /* 只给 sim_hal_reset() 用 */ void sim_time_reset_internal(void) { s_now_us = 0; s_delay_calls = 0; } uint64_t hal_time_now_us(void) { return s_now_us; } uint32_t hal_time_now_ms(void) { return (uint32_t)(s_now_us / 1000u); } uint32_t hal_time_elapsed_ms(uint32_t since_ms) { /* 无符号减法自然回绕,49.7 天那个坎不用特判。 */ return hal_time_now_ms() - since_ms; } void hal_time_delay_ms(uint32_t ms) { s_delay_calls++; s_now_us += (uint64_t)ms * 1000u; } void sim_time_set_us(uint64_t us) { s_now_us = us; } void sim_time_advance_us(uint64_t us) { s_now_us += us; } void sim_time_advance_ms(uint32_t ms) { s_now_us += (uint64_t)ms * 1000u; } uint32_t sim_time_delay_calls(void) { return s_delay_calls; }