feat(comm): 1.6.21 段2改电机整轮密排, 删段4历史覆盖窗

- 段2(32..543): count=实际电机数(0..9), 空节点不占位, 槽序按 node_id 升序
- 同号多通道取 seq 最新; magic@35=0xA5 区分密排与旧滑窗
- 差分填充: 节点集合+seq/online 未变时整段复用影子
- 删段4 fillRxWindow; 非STATUS仍走段1/3最近一帧
- 输入PDO总长仍600B, SII无需重刷; 主站需按count密排解码
- 动机: 接3电机却看到5状态帧(空槽占位); win_base滑窗对已识别电机无意义
This commit is contained in:
cbb
2026-09-11 01:08:37 +08:00
parent 959e2aef6e
commit 1742d9a759
8 changed files with 254 additions and 483 deletions
@@ -25,10 +25,10 @@ constexpr uint8_t kSegCount = 5U;
/**
* @brief 各段字节上界(开区间),用于把变化量归到布局段落。
* @note 584..599 的"段5 诊断 + 4B 保留"合并计:差分写不会单独优化保留区,
* 拆开只是多一档,但保留区若在涨就说明有东西在越界写,所以仍要看得见。
* @note 1.6.21 布局:段1(0..31) 段2(32..543) 段3(544..583) 段4 已删 段5(584..599)。
* 段4 上界=段5 起点,区间为空、恒 0,子索引保留以免动对象字典。
*/
constexpr uint16_t kSegEnd[kSegCount] = {32U, 320U, 360U, 584U, kInBytes};
constexpr uint16_t kSegEnd[kSegCount] = {32U, 544U, 584U, 584U, kInBytes};
/** @brief 上一份已发布的镜像。alignas(4) 是让优化器能把 4 字节 memcpy 折成单条
* LDR 的前提——丢了它,比对会从 ~150 次字访问退化成 600 次字节访问。 */