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;
}
Example #2
0
void initMotor(OUT_MOTOR* motor, char * n1, char* n2, char * file, int pinPWM, int pinIN1, int pinIN2, int pinSTBY, double vitesse){
	motor->cap = fopen(file,"r");

	motor->pinSTBY = pinSTBY;
	motor->pinIN1 = pinIN1;
	motor->pinIN2= pinIN2;
	motor->pinPWM=pinPWM;

	INP_GPIO(pinIN1);
	INP_GPIO(pinIN2);
	INP_GPIO(pinSTBY);
	INP_GPIO(pinPWM);

	OUT_GPIO(pinIN1);
	OUT_GPIO(pinIN2);
	OUT_GPIO(pinSTBY);
	OUT_GPIO(pinPWM); 
	GPIO_SET = 1 << pinSTBY;
	GPIO_CLR = 1 << pinIN1 | 1 << pinIN2 | 1<< pinPWM;

	motor->vitesse=vitesse;
	int err = rt_task_create(&(motor->task),n1, TASK_STKSZ, TASK_PRIO, TASK_MODE);
	err |= rt_alarm_create(&(motor->alarm),n2);
	err |= rt_task_set_periodic(&(motor->task), TM_NOW, PERIODE_MOTOR);
	if (!err) {
		rt_task_start(&(motor->task),&taskMotor,motor);
	}

}
Example #3
0
void initServoMotor(OUT_SERVO_MOTOR * servo, int pin, int angle){
	servo->angle=angle;
	servo->pin=pin;
	INP_GPIO(pin);
	OUT_GPIO(pin);

	int err = rt_task_create(&(servo->task), "task", TASK_STKSZ, TASK_PRIO, TASK_MODE);
	err |= rt_alarm_create(&(servo->alarm),"alarm");
	err |= rt_task_set_periodic(&(servo->task), TM_NOW, PERIODE_SERVO_MOTOR);
	if (!err) {
		rt_task_start(&(servo->task),&taskServo,servo);
	}

}
Example #4
0
int rt_alarm_create(RT_ALARM *alarm, const char *name)
{
    struct trank_alarm_wait *aw;
    pthread_mutexattr_t mattr;
    pthread_condattr_t cattr;
    int ret;

    aw = xnmalloc(sizeof(*aw));
    if (aw == NULL)
        return -ENOMEM;

    aw->alarm_pulses = 0;

    pthread_mutexattr_init(&mattr);
    pthread_mutexattr_settype(&mattr, mutex_type_attribute);
    pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
    pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_PRIVATE);
    ret = __bt(-__RT(pthread_mutex_init(&aw->lock, &mattr)));
    pthread_mutexattr_destroy(&mattr);
    if (ret)
        goto fail_lock;

    pthread_condattr_init(&cattr);
    pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_PRIVATE);
    ret = __bt(-pthread_cond_init(&aw->event, &cattr));
    pthread_condattr_destroy(&cattr);
    if (ret)
        goto fail_cond;

    ret = __CURRENT(rt_alarm_create(alarm, name, trank_alarm_handler, aw));
    if (ret)
        goto fail_alarm;

    return 0;
fail_alarm:
    __RT(pthread_cond_destroy(&aw->event));
fail_cond:
    __RT(pthread_mutex_destroy(&aw->lock));
fail_lock:
    xnfree(aw);

    return ret;
}
Example #5
0
int main(int argc, char *const argv[])
{
	int ret;

	traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int));

	ret = rt_alarm_create(&alrm, "ALARM", alarm_handler, &alrm);
	traceobj_check(&trobj, ret, 0);

	ret = rt_task_spawn(&t_main, "main_task", 0,  50, 0, main_task, NULL);
	traceobj_check(&trobj, ret, 0);

	traceobj_mark(&trobj, 8);

	traceobj_join(&trobj);

	traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int));

	exit(0);
}
Example #6
0
int main(int argc, char *argv[]) {
	setup_gpio_address();
	INP_GPIO(GPIO_PIN);
	OUT_GPIO(GPIO_PIN);

	mlockall(MCL_CURRENT|MCL_FUTURE);
	
	//servo1 = open("/sys/class/gpio/gpio18/value",O_WRONLY);
	
	int err = rt_task_create(&task_desc, "MiseA1", TASK_STKSZ, TASK_PRIO, TASK_MODE);
	err |= rt_alarm_create(&alarm_desc,"MiseA0");
	err |= rt_task_set_periodic(&task_desc, TM_NOW, 20000000);
	if (!err) {
		rt_task_start(&task_desc,&task_body,NULL);
	}
	
	pause();
	
	return 0;
}
Example #7
0
int main(void)
{
	unsigned long long before;
	RT_ALARM nalrm;
	RT_BUFFER nbuf;
	RT_COND ncond;
	RT_EVENT nevt;
	RT_HEAP nheap;
	RT_MUTEX nmtx;
	RT_PIPE npipe;
	RT_QUEUE nq;
	RT_SEM nsem;
	RT_TASK ntsk;
	int failed = 0;

	mlockall(MCL_CURRENT|MCL_FUTURE);

	rt_print_auto_init(1);

	rt_fprintf(stderr, "Checking for leaks in native skin services\n");
	before = get_used();
	check_native(rt_alarm_create(&nalrm, NULL));
	check_native(rt_alarm_delete(&nalrm));
	check_used("alarm", before, failed);

	before = get_used();
	check_native(rt_buffer_create(&nbuf, NULL, 16384, B_PRIO));
	check_native(rt_buffer_delete(&nbuf));
	check_used("buffer", before, failed);

	before = get_used();
	check_native(rt_cond_create(&ncond, NULL));
	check_native(rt_cond_delete(&ncond));
	check_used("cond", before, failed);

	before = get_used();
	check_native(rt_event_create(&nevt, NULL, 0, EV_PRIO));
	check_native(rt_event_delete(&nevt));
	check_used("event", before, failed);

	before = get_used();
	check_native(rt_heap_create(&nheap, "heap", 16384, H_PRIO | H_SHARED));
	check_native(rt_heap_delete(&nheap));
	check_used("heap", before, failed);

	before = get_used();
	check_native(rt_mutex_create(&nmtx, NULL));
	check_native(rt_mutex_delete(&nmtx));
	check_used("mutex", before, failed);

	before = get_used();
	check_native(rt_pipe_create(&npipe, NULL, P_MINOR_AUTO, 0));
	check_native(rt_pipe_delete(&npipe));
	check_used("pipe", before, failed);

	before = get_used();
	check_native(rt_queue_create(&nq, "queue", 16384, Q_UNLIMITED, Q_PRIO));
	check_native(rt_queue_delete(&nq));
	check_used("queue", before, failed);

	before = get_used();
	check_native(rt_sem_create(&nsem, NULL, 0, S_PRIO));
	check_native(rt_sem_delete(&nsem));
	check_used("sem", before, failed);

	before = get_used();
	check_native(rt_task_spawn(&ntsk, NULL, 0, 1, T_JOINABLE, empty, NULL));
	check_native(rt_task_join(&ntsk));
	sleep(1);		/* Leave some time for xnheap
				 * deferred free */
	check_used("task", before, failed);

	return failed ? EXIT_FAILURE : EXIT_SUCCESS;
}