private void ThreadAddP(object point) { var t2P = (STRUCT_2_D_POINT)point; //已经添加的个数 var index = t2P.m_indexNo; var td = new CMc.T2_D_COMPARE_DATA[t2P.m_listOfAxis1Position.Count - index]; var maxL = t2P.m_listOfAxis1Position.Count - index; //提取剩下的点 for (var i = 0; i < maxL; i++) { td[i].m_px = t2P.m_listOfAxis1Position[i + index]; td[i].m_py = t2P.m_listOfAxis2Position[i + index]; } //当前索引 var preIndex = 0; while (index < t2P.m_listOfAxis1Position.Count) { short pStatus; //0 :正在进行比较输出 1:比较输出完成 int pCount; //位置比较已输出次数 short pFifo; //当前空闲 FIFO short pFifoCount; //当前空闲 FIFO 剩余空间 short pBufCount; //FPGA 中 FIFO 剩余空间,FPGA 的 FIFO 总大小为 512,启动位置比较之前,压入的数据先进入 FPGA 的 FIFO CMc.GT_2DCompareStatus(t2P.m_cardNo, t2P.m_chnNo, out pStatus, out pCount, out pFifo, out pFifoCount, out pBufCount); if (pFifoCount >= 1024) { if (index + pFifoCount > t2P.m_listOfAxis1Position.Count) //如果pFifoCount大于剩余点数量, { pFifoCount = (short)(t2P.m_listOfAxis1Position.Count - index); //=总数-已加数 } //压入数据 CMc.GT_2DCompareData(t2P.m_cardNo, t2P.m_chnNo, pFifoCount, ref td[preIndex], pFifo); index = index + pFifoCount; preIndex = preIndex + pFifoCount; } } }