void* rt_task_pid(void *arg) { RT_TASK *task; static int n=0,k=0,sum=0; task = rt_task_init(nam2num("rtl0"), 4, 4096, 0); rt_task_make_periodic(task, now + tick_period, tick_period); rt_make_hard_real_time(); while(!stop) { eof[k]=set_point_speed - rt_speed; while(n<=k) { sum=sum + eof[n]; n++; } cofk=Kp*(eof[k]+(Ki/Kp)*sum); if(cofk>0) Vm_sin=Vm_sin+0.5; else if(cofk<0) Vm_sin=Vm_sin-0.5; n=0; k++; sum=0; if (k==99) k=0; rt_task_wait_period(); /*5ms*/ } rt_make_soft_real_time(); rt_task_delete(task); }