max_x); (fp, Ssh_x:% f n , Ssh_x); (fp, Vmaxx_x:% f n , mainmass_x [Vm_step_x] .V); (fp);=1;=fopen ( log2.dat raquo ;, w ); (mainmass_y [i - 1] .V lt;=Vmax_y) {
//while (i lt; 4) {= (- mainmass_y [i - 1] .V + sqrt (mainmass_y [i - 1] .V * mainmass_y [i - 1].V+2*a_y*Ssh_y))/a_y;_y[i].dt_ms=round(vardt*1000);=vardt*1000;_y[i].dt=SYSPAGE_ENTRY(qtime)-gt;cycles_per_sec * vardt; _y [i] .V=mainmass_y [i - 1] .V + a_y * vardt; _y [i] .St=i * Ssh_y; (fp, dt:% d n , mainmass_y [i ] .dt_ms); (fp, V_y:% f n , mainmass_y [i] .V);=i + 1;
} _ step_y=i - 1; (fp, a_y:% f n , a_y); (fp, Vmaxindexstep:% d n , Vm_step_y); (fp, Vmax_y:% f n , Vmax_y); (fp, Ssh_y:% f n , Ssh_y); (fp, Vmaxx_y:% f n , mainmass_y [Vm_step_y] .V); (fp);
//if (fp!=NULL)
//for (i=0; i lt;=Vm_step_x; i ++) _init (1000000);
//ініціалізація завдань (InOutTask_init ()!=0) {return - 1; }; (sled_x_init ()!=0) {return - 1;} (goto_0X_init ()!=0) {return - 1;}=1; (work)
{();//Завдання введення вхідних данних_x ();
//task3 (); _ 0X (); _ y (); _ 0Y (); ();//Завдання виведення вихідних даних
}; (0); ();
//деініціалізацію завдань (InOutTask_close ()!=0) {return - 1;};
//збережемо протокол роботи системи ();
return (0);
} _ cicle (PtWidget_t * widget, ApInfo_t * apinfo, PtCallbackInfo_t * cbinfo)
{_ attr_t attr;
/* eliminate unreferenced warnings * /=widget, apinfo=apinfo, cbinfo=cbinfo; _attr_init ( amp; attr); _ attr_setdetachstate ( amp; attr, PTHREAD_CREATE_DETACHED); _ create (NULL, amp; attr, amp; work_thread, NULL); _ mutex_init ( amp; mutex , NULL); (Pt_CONTINUE);
}
А.2 Лістинг коду завдання Sled_X
sled_x (void)
{FILE * fp1; short int temp;
//змінні состоянійint STATE=INITSTATE;// Поточний стан завдання
static int NEXTSTATE=STOP_Sx;// Наступний стан завдання (якщо завдання не змінила свій стан, то=- 1 Якщо на даному перегляді вона не змінює свого стану, то NextStatee=- 1 * /; int RUNENTRY;//ознака виконання секції входу для даного состояніяint phase=1 ;
//інтервалиuint64_t dt;//часовий інтервал між кроками в тактах
//Переменниеuint64_t TendStep;//час закінчення кроку в тактахuint64_t TendT;//час закінчення спрацьовування гальма в тактах
static int sost;// int64_t dx;
if (NEXTSTATE!=- 1)//задача змінила свій стан
{(TASKID, STATE, NEXTSTATE);//зареєструємо цю подію
STATE=NEXTSTATE;=- 1;=1;
} RUNENTRY=0; (STATE)
{STOP_Sx:
//секція входу (RUNENTRY) {
}; ((vihod_0X == 1) amp; amp; (vihod_0Y == 1)) {
//// printf ( xt n% d n , Xt);
//// printf ( xc n% d n , Xc);=Xc-Xt; (dx!=0) {_x=0;=BRAKE_Sx;=STOP_Sx;
}
}; BRAKE_Sx:
//секція входу (RUNENTRY) {(sost == STOP_Sx) {(num_Tx);=getoutbuf () amp; phases_mask_x; (temp | phases_signals_x [0]);
} else {(num_Tx);=getoutbuf () amp; phases_mask_x; (temp | 0); _ x=0;
}=ClockCycles () + Ttormoz;
} (ClockCycles () gt;=TendT) {(sost == STOP_Sx) {(dx == 1) {NEXTSTATE=STEP_Sx;} else {= ACCEL_Sx;}
} else {NEXTSTATE=STOP_Sx;}
}; ACCEL_Sx:
//секція входу (RUNENTRY) {
};=(Xc-Xt); (((dx gt; 0) amp; amp; (Vt_x lt; 0)) || ((dx lt; 0) amp; amp; (Vt_x gt; 0 ))) {NEXTSTATE=DEACCEL_Sx; } (abs (dx) lt;=indexstep_x) {NEXTSTATE=DEACCEL_Sx; } {_ x=indexstep_x + 1;=mainmass_x [indexstep_x] .dt;// v taktah (dx gt; 0) {if (++ phase gt; 4) {phase=1; }; }; (Dx lt; 0) {if (--phase lt; 1) {phase=4; }; };=Getoutbuf () amp; phases_mask_x; (temp | phases_signals_x [phase - 1]); ((indexstep_x == Vm_step_x) amp; amp; ((abs (dx) - 1) gt; indexstep_x)) {sost=CONST_Sx;} ((abs (dx)- 1) lt;=indexstep_x) {sost=DEACCEL_Sx;} ((indexstep_x lt; Vm_step_x) amp; amp; ((abs (dx) - 1) gt; indexstep_x)) {sost=ACCEL_Sx;}=WAIT_Sx;
}; WAIT_Sx:
//секція входу (RUNENTRY) {= ClockCycles () + dt;
} (ClockCycles () gt;=TendStep) {= sost; (dx gt; 0) {Xt=Xt + 1; Vt_x=mainmass_x [indexstep_x] .V;} {Xt=Xt - 1; Vt_x=-mainmass_x [indexstep_x] .V;}