modbus_map_task 是 Modbus 数据模型的周期轮询入口,每轮完成三件事:
刷新只读区:将最新测量值写入输入寄存器,将报警状态写入离散输入
执行保持寄存器变更:处理主站写入后的 dirty 标记,调用对应硬件接口
消费线圈命令:执行由线圈写入触发的延迟操作(对时、休眠、重启)
最终返回一个 action 位掩码,通知调用者需要执行的系统级动作(重配置/休眠/重启)。

        uint8_t modbus_map_task(void)
    {
        uint8_t actions;
    
        update_measurement_snapshot();//刷新输入寄存器(CHx测量值+时间)和离散输入(报警位)
        actions = apply_holding_changes();//执行所有dirty保持寄存器变更,部分附带RECONFIGURE action,与线圈action汇总
    
        //实施线圈寄存器修改
        if(apply_time_pending) {
            apply_time_pending = 0U;
            setTime(registers_get_u32(holding_registers, MODBUS_HOLDING_SET_TIME_HI));
        }
        if(sleep_pending) {
            sleep_pending = 0U;
            actions |= MODBUS_MAP_ACTION_SLEEP;
        }
        if(reboot_pending) {
            reboot_pending = 0U;
            actions |= MODBUS_MAP_ACTION_REBOOT;
        }
        return actions;
    }