// ec_dc.c 第 250-428 行boolean ecx_configdc(ecx_contextt *context){ // 遍历所有从站 for (i = 1; i <= context->slavecount; i++) { if (context->slavelist[i].hasdc) // 如果从站支持 DC { // 1. 读取各端口的时间戳 (void)ecx_FPRD(&context->port, slaveh, ECT_REG_DCTIME0, sizeof(ht), &ht, ...); // Port 0 时间 (void)ecx_FPRD(&context->port, slaveh, ECT_REG_DCTIME1, sizeof(ht), &ht, ...); // Port 1 时间 // ... 更多端口 ... // 2. 计算入口端口(时间戳最小的端口) entryport = 找到最小时间戳的端口(); // 3. 计算传播延迟 pdelay = ((dt3 - dt1) / 2) + dt2 + parent_pdelay; // 4. 写入延迟到从站 (void)ecx_FPWR(&context->port, slaveh, ECT_REG_DCSYSDELAY, sizeof(ht), &ht, ...); // 5. 计算并写入时间偏移 hrt = master_time - local_time - pdelay; (void)ecx_FPWR(&context->port, slaveh, ECT_REG_DCSYSOFFSET, sizeof(hrt), &hrt, ...); } }}