如何在DML 1.4中遍历寄存器组的未映射寄存器?
在DML 1.4中遍历未映射寄存器并筛选的替代方案
DML 1.4移除了寄存器组的unmapped_registers属性,你需要通过遍历所有寄存器并检查mapped状态来筛选未映射的寄存器,同时结合signal_number条件进行匹配。
方法1:使用foreach循环手动筛选
var target_reg = null; foreach (reg; $signals.registers) { // 筛选未映射且signal_number匹配的寄存器 if (!reg.mapped && reg.signal_number == signal) { target_reg = reg; break; } } if (target_reg) { // 原select块中的处理逻辑 } else { log "unimplemented", 1: "Power/Board: Signal %d is unimplemented", signal; return; }
方法2:使用find函数简化代码
DML 1.4支持使用find方法对集合进行条件查找,代码更简洁:
var reg = $signals.registers.find(|r| !r.mapped && r.signal_number == signal); if (reg) { // 原select块中的处理逻辑 } else { log "unimplemented", 1: "Power/Board: Signal %d is unimplemented", signal; return; }
关键说明
- 寄存器组的
registers属性包含该组下所有寄存器(无论是否映射) - 通过
reg.mapped判断寄存器是否已映射,!reg.mapped即为未映射寄存器 find方法接收一个匿名函数作为筛选条件,返回第一个匹配的元素;如果没有匹配项则返回null
内容的提问来源于stack exchange,提问作者ggiakoum
相关产品推荐
相关产品推荐

