optical/NxFuncs/motions/curves.c

514 lines
10 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#include "curves.h"
//--------------------------------------------------
#include "trigger.h"
#include <math.h>
//--------------------------------------------------
#if (1) // T<><54><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>߼Ӽ<DFBC><D3BC>٣<EFBFBD><D9A3>ĵ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>
//--------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB>
// <20><><EFBFBD><EFBFBD>: pps1 <20>ٶ<EFBFBD>1
// pps2 <20>ٶ<EFBFBD>2
// ppss <20><><EFBFBD>ٶ<EFBFBD>
// <20><><EFBFBD><EFBFBD>:
// λ<><CEBB>ֵ
u32 TTypeCalcDisplacement(float pps1, float pps2, float ppss)
{
// <20><>ʽ: d=(v2+v1)*(v2-v1)/(2a)
// v1 = pps1
// v2 = pps2
// a = ppss
float temp;
if (ppss == 0) // <20><><EFBFBD>ٶ<EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˶<EFBFBD>
{
return 0;
}
if (pps1 < pps2)
{
temp = (pps2-pps1);
}
else
{
temp = (pps1-pps2);
}
temp *= (pps1+pps2);
temp /= ppss;
temp /= 2;
return (temp+0.5f);
}
//--------------------------------------------------
// <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ijλ<C4B3><CEBB><EFBFBD><EFBFBD><EFBFBD>ٶȱ仯<C8B1><E4BBAF>Ҫ<EFBFBD><D2AA><EFBFBD>ٶ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// disp λ<><CEBB>
// pps1 <20>ٶ<EFBFBD>1
// pps2 <20>ٶ<EFBFBD>2
// <20><><EFBFBD><EFBFBD>: <20><><EFBFBD>ٶ<EFBFBD>
float TTypeCalcAddPPSS(u32 disp, float pps1, float pps2)
{
float temp;
// <20><>ʽ: a=(v2+v1)*(v2-v1)/(2*d)
// v1 = pps1
// v2 = pps2
// d = disp
if (disp == 0 || pps1 == pps2)
{
return 0;
}
if (pps1 < pps2)
{
temp = (pps2-pps1);
}
else
{
temp = (pps1-pps2);
}
temp *= (pps1+pps2);
temp /= disp;
temp /= 2;
return (temp);
}
//--------------------------------------------------
// <20><><EFBFBD><EFBFBD>ijλ<C4B3>ƺ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ٶ<EFBFBD><D9B6>£<EFBFBD><C2A3><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ٶ<EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// disp λ<><CEBB>
// pps1 <20>ٶ<EFBFBD>1
// ppss <20><><EFBFBD>ٶ<EFBFBD>
//
// <20><><EFBFBD><EFBFBD>:
// <20>ٶ<EFBFBD>ֵ
float TTypeCalcEndSpd(u32 disp, float pps1, float ppss)
{
float temp;
// <20><>ʽ: a=(v2+v1)*(v2-v1)/(2*d)
// v1 = pps1
// d = disp
// <09><><EFBFBD><EFBFBD> pps2 = sqrt(2*disp*ppss + pps1*pps1)
temp = 2.0f*disp;
temp *= ppss;
temp += pps1*pps1;
if (temp > 0)
{
temp = sqrt(temp);
}
else
{
temp = 0;
}
return (temp);
}
//--------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>ʱ<EFBFBD><CAB1>
float TTypeCalcRunTime(u32 disp, u32 startpps, u32 stoppps, u32 runpps, u32 addppss)
{
TTypeCtrl tctrl;
float runtime = 0;
float time = 0;
memset(&tctrl, 0, sizeof(TTypeCtrl));
// <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
tctrl.movement = disp;
tctrl.begPPS = startpps; // <20><><EFBFBD>γ<EFBFBD>ʼ<EFBFBD>ٶ<EFBFBD>
tctrl.endPPS = stoppps; // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
tctrl.runPPS = runpps; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
tctrl.maxPPSS = addppss; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶ<EFBFBD>
TTypeCalcRunParas(&tctrl); // <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC>ٲ<EFBFBD><D9B2><EFBFBD>
{
s32 newPPSS1, newPPSS2;
newPPSS1 = tctrl.newAddPPSS;
newPPSS2 = tctrl.newAddPPSS;
if (tctrl.begPPS > tctrl.newRunPPS)
{
newPPSS1 *= -1;
}
if (tctrl.endPPS > tctrl.newRunPPS)
{
newPPSS2 *= -1;
}
runtime = 0;
if (tctrl.mvmtseg[0] != 0 && newPPSS1 != 0)
{
time = (int)tctrl.newRunPPS - (int)tctrl.begPPS;
time /= newPPSS1;
runtime += time;
}
if (tctrl.mvmtseg[1] != 0 && tctrl.newRunPPS != 0)
{
time = tctrl.mvmtseg[1];
time /= (int)tctrl.newRunPPS;
runtime += time;
}
if (tctrl.mvmtseg[2] != 0 && newPPSS2 != 0)
{
time = (int)tctrl.newRunPPS - (int)tctrl.endPPS;
time /= newPPSS2;
runtime += time;
}
// printf("run time = %.6f\r\n", runtime);
}
return runtime;
}
//--------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD>
int TTypeCalcRunParas(TTypeCtrl * pTTypeCtrl)
{
#define TCDEBUG_OUT 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
int rslt;
// <20><>֪<EFBFBD><D6AA>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0>ƶε<C6B6><CEB5>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>õ<EFBFBD><C3B5>ı<EFBFBD><C4B1><EFBFBD>
u32 movement; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
u32 begPPS, endPPS, runPPS;
u32 addPPSS; // <20><><EFBFBD>ٶ<EFBFBD>
movement = pTTypeCtrl->movement;
begPPS = pTTypeCtrl->begPPS;
endPPS = pTTypeCtrl->endPPS;
runPPS = pTTypeCtrl->runPPS;
addPPSS = pTTypeCtrl->maxPPSS;
// <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
if (runPPS < begPPS || runPPS < endPPS)
{
runPPS = begPPS > endPPS ? begPPS:endPPS;
}
rslt = 0;
// 1. <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFB5BD><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>λ<EFBFBD><CEBB>
{
u32 mvmt1, mvmt2, mvmt3;
mvmt1 = TTypeCalcDisplacement(begPPS, runPPS, addPPSS);
mvmt3 = TTypeCalcDisplacement(endPPS, runPPS, addPPSS);
if (mvmt1 + mvmt3 >= movement) // <20><><EFBFBD>ܴﵽ<DCB4><EFB5BD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
{
float tmpv;
tmpv = movement * 2;
tmpv = sqrt((tmpv*addPPSS + begPPS*begPPS + endPPS*endPPS)/2.0); // <20>ܹ<EFBFBD><DCB9><EFBFBD>ķ<EFBFBD>ֵ<EFBFBD>ٶ<EFBFBD>
runPPS = (tmpv);
#if (TCDEBUG_OUT == 1)
printf("TTypeCalcRunParas runPPS=%d\r\n", runPPS);
#endif
if (runPPS < begPPS || runPPS < endPPS) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3>ٶ<EFBFBD>
{
u32 tpmvmt;
tpmvmt = TTypeCalcDisplacement(begPPS, endPPS, addPPSS); // ֱ<>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD>Сλ<D0A1><CEBB>
if (tpmvmt > movement) // <20><><EFBFBD><EFBFBD>Ҫλ<D2AA><CEBB>̫<EFBFBD>󣬲<EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼӼ<C9BC><D3BC>٣<EFBFBD><D9A3>滮ʧ<E6BBAE><CAA7>
{
addPPSS = TTypeCalcAddPPSS(movement, begPPS, endPPS); // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
#if (TCDEBUG_OUT == 1)
printf("TTypeCalcRunParas addPPSS=%d\r\n", addPPSS);
#endif
if (begPPS <= endPPS)
{
mvmt1 = movement;
mvmt2 = 0;
mvmt3 = 0;
}
else
{
mvmt1 = 0;
mvmt2 = 0;
mvmt3 = movement;
}
}
else
{
if (begPPS <= endPPS)
{
mvmt1 = tpmvmt;
mvmt2 = movement - tpmvmt;
mvmt3 = 0;
}
else
{
mvmt1 = 0;
mvmt2 = movement - tpmvmt;
mvmt3 = tpmvmt;
}
}
}
else
{
mvmt1 = TTypeCalcDisplacement(begPPS, runPPS, addPPSS);
mvmt3 = TTypeCalcDisplacement(endPPS, runPPS, addPPSS); // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>λ<EFBFBD><CEBB>
if (mvmt1 + mvmt3 > movement)
{
mvmt2 = 0;
mvmt3 = movement - mvmt1;
}
else
{
mvmt2 = movement - mvmt1 - mvmt3;
}
}
}
else // <20><><EFBFBD>Դﵽ<D4B4><EFB5BD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
{
mvmt2 = movement - mvmt1 - mvmt3;
}
pTTypeCtrl->mvmtseg[0] = mvmt1; // <20><>һ<EFBFBD><D2BB>
pTTypeCtrl->mvmtseg[1] = mvmt2; // <20>ڶ<EFBFBD><DAB6><EFBFBD>
pTTypeCtrl->mvmtseg[2] = mvmt3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pTTypeCtrl->newRunPPS = runPPS;
pTTypeCtrl->newAddPPSS = addPPSS;
}
#if (TCDEBUG_OUT == 1)
printf("TTypeCalcRunParas: seg[0]=%d, seg[2]=%d, seg[1]=%d, newRunPPS[1]=%.1f, newAddPPSS=%.1f\r\n",
pTTypeCtrl->mvmtseg[0], pTTypeCtrl->mvmtseg[2], pTTypeCtrl->mvmtseg[1], pTTypeCtrl->newRunPPS, pTTypeCtrl->newAddPPSS);
#endif
return rslt;
}
//--------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD>
int TTypeCalcDivTab(u32 fin, TTypeCtrl * pTTypeCtrl, u32 * pFidvTab, u32 * pTablen)
{
#define TDEBUG_OUT 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#if (TDEBUG_OUT == 1)
u32 time, tptm, lstm;
#endif
int rslt;
int totalclk = 0; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3A8>λ<EFBFBD><CEBB>1<EFBFBD><31>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC>
u32 movement;
if (fin <= 0 || pTTypeCtrl == NULL || pFidvTab == NULL || pTablen == NULL)
{
return -1;
}
#if (TDEBUG_OUT == 1)
time = GetUsSoftTimer();
lstm = time;
#endif
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
TTypeCalcRunParas(pTTypeCtrl);
*pTablen = 0;
rslt = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD>
{
u32 i;
float begPPS; // <20><><EFBFBD>γ<EFBFBD>ʼ<EFBFBD>ٶ<EFBFBD>
float endPPS; // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
float runPPS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
float newPPSS1, newPPSS2;
float pps; // <20>ٶ<EFBFBD>ֵ
float add;
float rpps1, rpps2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
int runclk;
int coef;
u32 * pBuf;
movement = pTTypeCtrl->movement;
begPPS = pTTypeCtrl->begPPS;
endPPS = pTTypeCtrl->endPPS;
runPPS = pTTypeCtrl->newRunPPS;
newPPSS1 = pTTypeCtrl->newAddPPSS;
newPPSS2 = pTTypeCtrl->newAddPPSS;
if (begPPS > runPPS)
{
newPPSS1 *= -1;
}
if (endPPS > runPPS)
{
newPPSS2 *= -1;
}
#if (TDEBUG_OUT == 1)
lstm = GetUsSoftTimer();
#endif
pps = begPPS;
rpps1 = pps;
runclk = 0;
add = newPPSS1;
add /= fin;
pBuf = &(pFidvTab[0]);
for (i = 0; i < pTTypeCtrl->mvmtseg[0]; i++) // <20><>һ<EFBFBD><D2BB>
{
if (pps > runPPS)
{
pps = runPPS;
}
if (newPPSS1 < 0 && pps < endPPS)
{
pps = endPPS;
}
coef = fin / pps; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ֵ<EFBFBD>õ<EFBFBD>ϵ<EFBFBD><CFB5>
*pBuf++ = coef; // <20><>¼<EFBFBD><C2BC>Ƶϵ<C6B5><CFB5>
runclk += coef; // <20><><EFBFBD>ݷ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
pps = begPPS + runclk * add; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶȹ滮<C8B9><E6BBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>̵<EFBFBD><CCB5>ٶ<EFBFBD>ֵ
}
rpps1 = pps;
totalclk += runclk;
#if (TDEBUG_OUT == 1)
tptm = GetUsSoftTimer();
printf("TCDiv seg1 tm=%uus\r\n", tptm-lstm);
lstm = tptm;
#endif
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pps = endPPS;
rpps2 = pps;
runclk = 0;
add = newPPSS2;
add /= fin;
pBuf = &(pFidvTab[movement - 1]);
for (i = 0; i < pTTypeCtrl->mvmtseg[2]; i++)
{
if (pps > runPPS)
{
pps = runPPS;
}
if (newPPSS2 < 0 && pps < endPPS)
{
pps = endPPS;
}
coef = fin / pps; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ֵ<EFBFBD>õ<EFBFBD>ϵ<EFBFBD><CFB5>
*pBuf-- = coef; // <20><>¼<EFBFBD><C2BC>Ƶϵ<C6B5><CFB5>
runclk += coef; // <20><><EFBFBD>ݷ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
pps = endPPS + runclk * add; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶȹ滮<C8B9><E6BBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>̵<EFBFBD><CCB5>ٶ<EFBFBD>ֵ
}
rpps2 = pps;
totalclk += runclk;
#if (TDEBUG_OUT == 1)
tptm = GetUsSoftTimer();
printf("TCDiv seg3 tm=%uus\r\n", tptm-lstm);
lstm = tptm;
#endif
// <20><><EFBFBD>ٶ<EFBFBD>
pps = (rpps1 + rpps2) / 2;
if (pps > runPPS)
{
pps = runPPS;
}
if (newPPSS2 < 0 && pps < endPPS)
{
pps = endPPS;
}
runclk = 0;
pBuf = &(pFidvTab[pTTypeCtrl->mvmtseg[0]]);
coef = fin / pps; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ֵ<EFBFBD>õ<EFBFBD>ϵ<EFBFBD><CFB5>
for (i = 0; i < pTTypeCtrl->mvmtseg[1]; i++)
{
*pBuf++ = coef; // <20><>¼<EFBFBD><C2BC>Ƶϵ<C6B5><CFB5>
}
runclk = pTTypeCtrl->mvmtseg[1] * coef;
totalclk += runclk;
#if (TDEBUG_OUT == 1)
tptm = GetUsSoftTimer();
printf("TCDiv seg2 tm=%uus\r\n", tptm-lstm);
lstm = tptm;
#endif
}
if (rslt < 0)
{
rslt++;
}
else
{
*pTablen = movement;
rslt = totalclk;
}
#if (TDEBUG_OUT == 1)
tptm = GetUsSoftTimer();
printf("TCDiv tm=%uus\r\n", tptm-time);
#endif
return rslt;
}
//--------------------------------------------
#endif
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
#if (0) // S<><53><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>߼Ӽ<DFBC><D3BC>٣<EFBFBD><D9A3>߶Σ<DFB6>
typedef struct
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 movement; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
float begPPS; // <20><><EFBFBD>γ<EFBFBD>ʼ<EFBFBD>ٶ<EFBFBD>
float endPPS; // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
float runPPS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>v<EFBFBD><76>
float maxPPSS; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶȣ<D9B6>a<EFBFBD><61>
float maxPPSSS; // <20><><EFBFBD><EFBFBD><EFBFBD>ļӼ<C4BC><D3BC>ٶȣ<D9B6>j<EFBFBD><6A>
// <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
u32 timeseg[7]; // <20>߶<EFBFBD>ʱ<EFBFBD><EFBFBD><E4B3A4>, <20><>λΪ1<CEAA><31>ʱ<EFBFBD><CAB1>Ƭ
u32 mvmtseg[7]; // <20>߶<EFBFBD>λ<EFBFBD><CEBB>, <20>ֶε<D6B6>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>, ˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
float newRunPPS; // <20>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
}STypeCtrl;
// <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
u32 STypeCalcDisplacement(float pps1, float pps2, float ppss);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
float STypeCalcAddPPSS(u32 disp, float pps1, float pps2);
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
float STypeCalcEndSpd(u32 disp, float pps1, float ppss);
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD>ʱ<EFBFBD><CAB1>
float STypeCalcRunTime(u32 disp, u32 startpps, u32 stoppps, u32 runpps, u32 addppss);
// <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
int STypeCalcRunParas(STypeCtrl * pSTypeCtrl);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD>
int STypeCalcDivTab(u32 fin, STypeCtrl * pSTypeCtrl, u32 * pFidvTab, u32 * pTablen);
#endif