コード例 #1
0
ファイル: alarm-1.c プロジェクト: rcn-ee/xenomai-3
static void main_task(void *arg)
{
	RT_TASK *p;
	int ret;

	traceobj_enter(&trobj);

	p = rt_task_self();
	traceobj_assert(&trobj, p != NULL && rt_task_same(p, &t_main));

	traceobj_mark(&trobj, 5);

	ret = rt_alarm_start(&alrm, 200000000ULL, 200000000ULL);
	traceobj_check(&trobj, ret, 0);

	traceobj_mark(&trobj, 6);

	ret = rt_task_suspend(&t_main);
	traceobj_check(&trobj, ret, 0);

	traceobj_mark(&trobj, 7);

	ret = rt_alarm_delete(&alrm);
	traceobj_check(&trobj, ret, 0);

	traceobj_exit(&trobj);
}
コード例 #2
0
int main(void)
{	
	int err;
	int i;
	RT_TASK task[NB_TACHES];
	char nom_tache[80];
	
	mlockall(MCL_CURRENT|MCL_FUTURE);
	rt_print_auto_init(1);

	if ((err = rt_alarm_create(& alarme, "Ex01")) != 0) {
		fprintf(stderr, "rt_alarm_create(): %s\n",
		                strerror(-err));
		exit(EXIT_FAILURE);
	}

	for (i = 0; i < NB_TACHES-1; i++) {
		snprintf(nom_tache, 80, "Alarme-%d\n", i+1);
		if ((err = rt_task_spawn(& (task[i]), nom_tache, 0,
		                         90-NB_TACHES + i, T_JOINABLE,
		                         fonction_thread, (void *) (i+1))) != 0) {
			fprintf(stderr, "rt_task_spawn: %s\n", strerror(-err));
			exit(EXIT_FAILURE);
		}
	}

	if ((err = rt_alarm_start(& alarme, TM_NOW, 1000000000)) != 0) {
		fprintf(stderr, "rt_alarm_start: %s\n", strerror(-err));
		exit(EXIT_FAILURE);
	}

	for (i = 0; i < NB_TACHES; i ++)
		rt_task_join(& task[i]);
	return 0;
}
コード例 #3
0
void task_body (void *args) {
	while (1) {
		if(!rt_task_wait_period(NULL)) {
			//write(servo1, &one, 1);
			GPIO_SET = 1 << GPIO_PIN;
			
			int t = (int)(1000000*(1.2+0.6*((++i/200)%3)/2.));
			rt_alarm_start(&alarm_desc,t,TM_INFINITE);
		}
		if (!rt_alarm_wait(&alarm_desc)) {
			//write(fichier, &zero, 1);
			GPIO_CLR = 1 << GPIO_PIN;
		}
	}
}
コード例 #4
0
ファイル: motor.c プロジェクト: ilai-deutel/SLAMing-robot
void taskServo(void* cookie) {
	OUT_SERVO_MOTOR* out=(OUT_SERVO_MOTOR*)cookie;
	while (1) {
		if(!rt_task_wait_period(NULL)) {
			int time = ANGLE_TO_TIME(out->angle);
			if(time > 0){
				GPIO_SET = 1 << out->pin;
				if(time < PERIODE_SERVO_MOTOR){
					rt_alarm_start(&(out->alarm), time, TM_INFINITE);
					if (!rt_alarm_wait(&(out->alarm))) {
						GPIO_CLR = 1 << out->pin;
					}
				}
			}
			else {
				GPIO_CLR = 1 << out->pin;
			}
		}
	}
}
コード例 #5
0
ファイル: motor.c プロジェクト: ilai-deutel/SLAMing-robot
void taskMotor(void* cookie) {
	OUT_MOTOR* out=(OUT_MOTOR*)cookie;
	double coef=0;
	double lastcoef=1;
	int time=0;
	double val;

	getVitesse(out);//initialise les variables

	while (1) {
		if(!rt_task_wait_period(NULL)) {
			lastcoef=coef;	
			val=getVitesse(out);
			coef+=MOTOR_ASSERVISSEMENT*(out->vitesse- val);
			if(coef>1)coef=1;
			else if(coef<-1) coef=-1;
			if(1 || lastcoef>=0 && coef<0 || lastcoef<=0 && coef>0 || coef == 0 && lastcoef !=0){
				GPIO_CLR = (coef<=0) << out->pinIN1 | (coef>=0) << out->pinIN2;
				GPIO_SET = (coef>0) << out->pinIN1 | (coef<0) << out->pinIN2;
			}
			time = COEFF_TO_TIME(coef); 

			if(time > 0){
				GPIO_SET = 1 << out->pinPWM;
				if(time < PERIODE_MOTOR){
					rt_alarm_start(&(out->alarm), time, TM_INFINITE);
					if (!rt_alarm_wait(&(out->alarm))) {
						GPIO_CLR = 1 << out->pinPWM;
					}
				}
			}
			else {
				GPIO_CLR = 1 << out->pinPWM;
			}
		}
	}
}