/* sim 的总闸:一次把各路都恢复出厂。每个测试的 setUp() 调它。 各路的清理函数是内部符号,不进 sim_hal.h —— 测试没有理由单独重置某一路。 ⚠️ 这里有**两个**总闸:`sim_hal_reset()` 是「换了一块新板子」, `sim_hal_reboot()` 是「同一块板子掉电重启」。两者只差掉电不丢区那一块, 而 §10.7 的验收正好卡在这个差上(见 hal_store_sim.c 开头)。 */ #include "hal_i2c_acct.h" #include "sim_hal.h" void sim_i2c_reset_internal(void); void sim_gpio_reset_internal(void); void sim_sr595_reset_internal(void); void sim_pca9555_reset_internal(void); void sim_pwm_reset_internal(void); void sim_time_reset_internal(void); void sim_lock_reset_internal(void); void sim_store_reset_internal(void); void sim_store_reboot_internal(void); /* 除了掉电不丢区之外的一切。reset 与 reboot 的唯一区别就在那一块。 */ static void reset_the_volatile_half(void) { sim_i2c_reset_internal(); sim_gpio_reset_internal(); sim_sr595_reset_internal(); sim_pca9555_reset_internal(); sim_pwm_reset_internal(); sim_time_reset_internal(); sim_lock_reset_internal(); hal_i2c_acct_reset(); } void sim_hal_reset(void) { reset_the_volatile_half(); sim_store_reset_internal(); /* 新板子:flash 也是出厂态 */ } void sim_hal_reboot(void) { reset_the_volatile_half(); sim_store_reboot_internal(); /* 掉电重启:flash 里的内容一个字节不动 */ }