예제 #1
0
//-----------------------------------------------------------------------------
void child_func(int arg) {

int i;
size_t n = 0;
char inBuf[50];
uint priority = 0;
int nMsgs = 0;
struct mq_attr my_attrs ={0,0,0,0};
mode_t my_mode = 0;
int my_oflags = (O_RDONLY | O_NONBLOCK);
mqd_t rx_q = INVALID_PQUEUE;


  rt_printk("Starting child task %d\n", arg);
  for(i = 0; i < 3; i++) {

    rt_printk("child task %d, loop count %d\n", arg, i);

  }
  //Open the queue for reading
  rx_q = mq_open("my_queue", my_oflags, my_mode, &my_attrs);
  if (rx_q <= 0) {
    rt_printk("ERROR: child cannot open my_queue\n");
  } else {

    //Get the message(s) off the pQueue
    n = mq_getattr(rx_q, &my_attrs);
    nMsgs = my_attrs.mq_curmsgs;
    rt_printk("There are %d messages on the queue\n", nMsgs);

    while(nMsgs-- > 0) {
      n = mq_receive(rx_q, inBuf, sizeof(inBuf), &priority);
      inBuf[n] = '\0';

      //Report what happened
      rt_printk("Child got >%s<, %d bytes at priority %d\n", inBuf,n, priority);
    }
  }

  mq_close(rx_q);
  mq_unlink("my_queue");
  free_z_apps(rt_whoami());
  rt_task_delete(rt_whoami());

}
예제 #2
0
int main(void)
{
	RT_TASK *mytask;
	MBX *Keyboard, *Screen;
	unsigned int i;
	char d = 'd';
	char chain[12];
	char displine[40] = "CLOCK-> 00:00:00  CHRONO-> 00:00:00";
	
	signal(SIGINT, endme);
 	if (!(mytask = rt_task_init(nam2num("SCRTSK"), 20, 0, 0))) {
		printf("CANNOT INIT SCREEN TASK\n");
		exit(1);
	}

 	if (!(Keyboard = rt_get_adr(nam2num("KEYBRD")))) {
		printf("CANNOT FIND KEYBOARD MAILBOX\n");
		exit(1);
	}

	if (rt_mbx_send(Keyboard, &d, 1) > 0 ) {
		fprintf(stderr, "Can't send initial command to RT-task\n");
		exit(1);
	}

 	if (!(Screen = rt_get_adr(nam2num("SCREEN")))) {
		printf("CANNOT FIND SCREEN MAILBOX\n");
		exit(1);
	}

	while(1) {
		rt_mbx_receive(Screen, chain, 12);
		if (chain[0] == 't') {
			for (i = 0; i < 11; i++) {
				displine[i+27] = chain[i+1];
			}
		} else if (chain[0] == 'h') {
			for (i = 0; i < 8; i++) {
				displine[i+8] = chain[i+1];
			}
		}
		printf("%s\n", displine);
	}
	rt_task_delete(mytask);
}
void *ThreadImplLxrt33::runThread(void *arg)
{
  ThreadImplLxrt33 *self = static_cast<ThreadImplLxrt33*>(arg);

  self->m_rt_task = rt_task_init(getpid() + pthread_self_rt(), abs(self->m_priority),
                                 DEFAULT_STACK_SIZE, 0);
  if (self->m_rt_task == NULL)
  {
    PRINTF("ERROR: Cannot initialize LXRT task %lu!\n", self->m_thread_id);
    PRINTF("       Probably another thread with the same name already exists.\n");
  }
  else
  {
    rt_task_use_fpu(self->m_rt_task, 1);

    if (self->m_priority < 0)
    {
      rt_make_hard_real_time();
      if (!rt_is_hard_real_time(rt_buddy()))
      {
        PRINTF("ERROR: Setting thread %lu to hard real-time failed!\n", self->m_thread_id);
      }
      else
      {
        // Everything worked as expected, so no message here.
      }
    }
    else
    {
      // This is a soft realtime thread, so nothing additional has to
      // be done here.
    }

    self->m_thread->runThread();

    rt_make_soft_real_time();

    // TODO: Check if this is correct. The RTAI 3.5 and 3.8
    // implementations leave this to a call to join().
    rt_task_delete(self->m_rt_task);
    self->m_rt_task = NULL;
  }

  return NULL;
}
예제 #4
0
static void cleanup(void)
{
    int ret;

    if (verbose)
	printf("Cleaning up...\n");

    usleep(100000);

    if (s >= 0) {
	ret = rt_dev_close(s);
	s = -1;
	if (ret) {
	    fprintf(stderr, "rt_dev_close: %s\n", strerror(-ret));
	}
	rt_task_delete(&rt_task_desc);
    }
}
예제 #5
0
/****
 * Initialize the realtime txqueue wakeup manager and its mailbox.
 */
int rt_wakeup_mgr_init (struct rtnet_mgr *mgr) {
	int ret = 0;

	if ( (ret=rt_mbx_init (&(mgr->mbx), sizeof(struct rtnet_msg))) )
		return ret;
	if ( (ret=rt_task_init(&(mgr->task), &rt_wakeup_manager_task, (int)mgr, 4096, RTNET_RT_WAKEUP_PRIORITY, 0, 0)) )
		goto rt_mbox_err;
	if ( (ret=rt_task_resume(&(mgr->task))) )
		goto rt_task_err;

	return (ret);

 rt_task_err:
	rt_task_delete(&(mgr->task));
 rt_mbox_err:
	rt_mbx_delete(&(mgr->mbx));
	return (ret);
}
예제 #6
0
void cleanup_module(void)
{
	int cpuid;
	rt_reset_irq_to_sym_mode(0);
	CLEAR_8254_TSC_EMULATION;
	rt_free_timer();
	rtf_destroy(CMDF);
	if (Mode) {
		rt_sem_delete(&sem);
	}
	rt_task_delete(&thread);
	printk("\n\nCPU USE SUMMARY\n");
	for (cpuid = 0; cpuid < NR_RT_CPUS; cpuid++) {
		printk("# %d -> %d\n", cpuid, cpu_used[cpuid]);
	}
	printk("# ints -> %d\n",  cpu_used[NR_RT_CPUS]);
	printk("END OF CPU USE SUMMARY\n\n");
}
예제 #7
0
파일: semtest.c 프로젝트: ArcEye/RTAI
void task2(void)
{
	int i;

	rt_thread_init(nam2num("TASK2"), 2, 0, SCHED_FIFO, 0x1);
	rt_grow_and_lock_stack(STACK_SIZE - 10000);
#ifdef MAKE_HARD
	MAKE_HARD();
#endif	
	rt_printk("TASK2 TID = %d.\n\n", rt_gettid());

	rt_printk("TESTING FAILING WAIT IF ......");
	for (i = 0; i < LOOPS; i++) {
		if (rt_sem_wait_if(sem2) > 0) {
			break;
		}
	}
	rt_printk(" %s OK.\n", i == LOOPS ? "" : "NOT");

	rt_printk("TESTING SUCCEEDING WAIT IF ...");
	rt_sem_signal(sem2);
	for (i = 0; i < LOOPS; i++) {
		if (rt_sem_wait_if(sem2) == 1) {
			rt_sem_signal(sem2);
		} else {
			break;
		}
	}
	rt_printk(" %s OK.\n", i == LOOPS ? "" : "NOT");

	rt_printk("TESTING WAIT/SIGNAL ..........");
	rt_sem_wait(sem2);
	for (i = 0; i < LOOPS; i++) {
		rt_sem_signal(sem1);
		if (rt_sem_wait(sem2) == 0) {
			break;
		}
	}
	rt_printk(" %s OK.\n", i == LOOPS ? "" : "NOT");

        rt_task_delete(NULL);
	rt_printk("\nTASK2 EXITING : ");
	return;
}
예제 #8
0
파일: start_task.c 프로젝트: cjecho/RTAI
int main(int argc, char *argv[])
{
        RT_TASK *task;
        struct sockaddr_in addr;
	int i, srvport;

        if (!(task = rt_task_init(nam2num("STRTSK"), 0, 0, 0))) {
                printf("CANNOT INIT START_TASK TASK\n");
                exit(1);
        }

        comnode = tasknode = 0;
        for (i = 0; i < argc; i++) {
                if (strstr(argv[i], "ComNode=")) {
                	inet_aton(argv[i] + 8, &addr.sin_addr);
	                comnode = addr.sin_addr.s_addr;
                        argv[i] = 0;
                        continue;
                }
                if (strstr(argv[i], "TaskNode=")) {
                	inet_aton(argv[i] + 9, &addr.sin_addr);
	                tasknode = addr.sin_addr.s_addr;
                        argv[i] = 0;
                        continue;
                }
        }
        if (!comnode) {
                inet_aton("127.0.0.1", &addr.sin_addr);
                comnode = addr.sin_addr.s_addr;
        }
        if (!tasknode) {
                inet_aton("127.0.0.1", &addr.sin_addr);
                tasknode = addr.sin_addr.s_addr;
        }
	init_module();
	rt_thread_join(thread);
        while ((srvport = rt_request_port(comnode)) <= 0) {
                msleep(100);
        }
        RT_sem_signal(comnode, srvport, end_sem);
        rt_release_port(comnode, srvport);
        rt_task_delete(task);
	exit(0);
}
예제 #9
0
파일: testmsg.c 프로젝트: ArcEye/RTAI
static void mfun(int t)
{
	char tname[6] = "MFUN", mname[6] = "RMBX";
	RT_TASK *mytask;
	int smbx, rmbx, msg[MAXSIZ + 1], mtype, i;

	randu();
	tname[4] = mname[4] = t + '0';
	tname[5] = mname[5] = 0;
	mytask = rt_thread_init(nam2num(tname), t + 2, 0, SCHED_FIFO, 0xF);
	smbx = rt_msgget(nam2num("SMSG"), 0);
	rmbx = rt_msgget(nam2num(mname), 0);
	mlockall(MCL_CURRENT | MCL_FUTURE);
	rt_make_hard_real_time();

	msg[0] = t;
	rt_sem_wait_barrier(barrier);
	while (end < t) {
		msg[MAXSIZ] = 0;
		for (i = 1; i < MAXSIZ; i++) {
			msg[MAXSIZ] += (msg[i] = MAXSIZ*randu()); 
		}
		if (rt_msgsnd_nu(smbx, 1, msg, sizeof(msg), 0)) {
			rt_printk("SEND FAILED, TASK: %d\n", t);
			goto prem;
		}
		msg[0] = msg[1] = 0;
		if (rt_msgrcv_nu(rmbx, &mtype, msg, sizeof(msg), 1, 0) < 0) {
			rt_printk("RECEIVE FAILED, TASK: %d\n", t);
			goto prem;
		}
		if (msg[0] != t || msg[1] != 0xFFFFFFFF) {
			rt_printk("WRONG REPLY TO TASK: %d.\n", t);
                        goto prem;
		}
		cnt[t]++;
//		rt_printk("TASK: %d, OK (%d).\n", t, cnt[t]);
		rt_sleep(nano2count(SLEEP_TIME));
	}
prem: 
	rt_make_soft_real_time();
	rt_task_delete(mytask);
	printf("TASK %d ENDS.\n", t);
}
예제 #10
0
파일: tbx3.c 프로젝트: cjecho/RTAI
void cleanup_module(void)
{
	while (!cleanup) {
		current->state = TASK_INTERRUPTIBLE;
		schedule_timeout(HZ/10);
	}
	stop_rt_timer();
	rt_task_delete(&t1);
	rt_task_delete(&t2);
	rt_task_delete(&t3);
	rt_task_delete(&t4);
	rt_task_delete(&t5);
	rt_task_delete(&t6);
	rt_task_delete(&t7);
	rt_tbx_delete(&bx);
	rt_printk("\n\nEND\n\n");
}
예제 #11
0
파일: comnode.c 프로젝트: cjecho/RTAI
int main(void)
{
	int i;
        RT_TASK *task;

        if (!(task = rt_task_init(nam2num("CMNODE"), 0, 0, 0))) {
                printf("CANNOT INIT COMNODE TASK\n");
                exit(1);
        }

	init_module();
	for (i = 0; i < 7; i++) {
		rt_sem_wait(end_sem);
	}
	cleanup_module();
	rt_task_delete(task);

	exit(0);
}
예제 #12
0
static void __exit rtnetproxy_cleanup_module(void)
{

    /* Unregister the fallback at rtnet */
    rt_ip_register_fallback(0);

    /* free the rtai srq */
    rt_free_srq(rtnetproxy_srq);

    rt_task_suspend(&rtnetproxy_thread);
    rt_task_delete(&rtnetproxy_thread);

    /* Free the ringbuffers... */
    {
        struct sk_buff *del_skb;  /* standard skb */
        while ((del_skb = read_from_ringbuffer(&ring_skb_rtnet_kernel)) != 0)
        {
            dev_kfree_skb(del_skb);
        }
        while ((del_skb = read_from_ringbuffer(&ring_skb_kernel_rtnet)) != 0)
        {
            dev_kfree_skb(del_skb);
        }
    }
    {
        struct rtskb *del; /* rtnet skb */
        while ((del=read_from_ringbuffer(&ring_rtskb_kernel_rtnet))!=0)
        {
            kfree_rtskb(del); // Although this is kernel mode, freeing should work...
        }
        while ((del=read_from_ringbuffer(&ring_rtskb_rtnet_kernel))!=0)
        {
            kfree_rtskb(del); // Although this is kernel mode, freeing should work...
        }
    }

    /* Unregister the net device: */
    unregister_netdev(&dev_rtnetproxy);
    kfree(dev_rtnetproxy.priv);

    memset(&dev_rtnetproxy, 0, sizeof(dev_rtnetproxy));
    dev_rtnetproxy.init = rtnetproxy_init;
}
예제 #13
0
static void *Task6(void *arg)
{   
	RT_TASK *t6;
	int status;
	MSG buf;
    
	t6 = rt_task_init_schmod(nam2num("T6"), BASE_PRIO + 5, 0, 0, SCHED_FIFO, 0xF);
	printf("\nTask6 (%p) starting\n", t6);
	mlockall(MCL_CURRENT | MCL_FUTURE);

	while (!endall) {
		memset((char*)&buf, 0, sizeof(buf));    
		status = rt_tbx_receive(bx, (char*)&buf, sizeof(buf)); 
		printf("\nTask6 received msgnr %u from task %u, status=%d\n", buf.progressive, buf.sending_task, status);
	}
	rt_task_delete(t6);
	printf("\nTask6 ends itself\n");
	return 0;
}
예제 #14
0
void cleanup_module(void)
{
    if (start_timer)
        stop_rt_timer();

    while (close_rt(sock) == -EAGAIN) {
        set_current_state(TASK_INTERRUPTIBLE);
        schedule_timeout(1*HZ); /* wait a second */
    }

    /* rt_task_delete     */
    rt_task_delete(&rt_task);

    /* destroy the fifo   */
    rtf_destroy(PRINT);

    printk("packets sent:\t\t%10lu\npackets received:\t%10lu\npacketloss:\t\t"
           "%10lu%%\n", sent, rcvd, 100-((100*rcvd)/sent));
}
예제 #15
0
파일: sender.c 프로젝트: ArcEye/3.4.55-rtai
int main(void)
{
	RT_TASK *sending_task ;
	SEM *shmsem, *agentsem;
	int i, *shm, shm_size, count;
	unsigned long chksum;

	sending_task = rt_task_init_schmod(nam2num("STSK"), 0, 0, 0, SCHED_FIFO, 0xF);
	mlockall(MCL_CURRENT | MCL_FUTURE);
	rt_make_hard_real_time();
	shmsem   = rt_get_adr(nam2num("SHSM"));
	agentsem = rt_get_adr(nam2num("AGSM"));
	shm = rt_shm_alloc(nam2num("MEM"), 0, 0);
	shm_size = shm[0];
	count = COUNT;
	while(count--) {
		printf("SENDING TASK WAIT ON SHMSEM\n");
		rt_sem_wait(shmsem);
		printf("SENDING TASK SIGNALLED ON SHMSEM\n");
			if (!(shm[0] = ((float)rand()/(float)RAND_MAX)*shm_size) || shm[0] > shm_size) {
				shm[0] = shm_size;
			}
			chksum = 0;
			for (i = 1; i <= shm[0]; i++) {
				shm[i] = rand();
				chksum += shm[i];
			}
			shm[shm[0] + 1] = chksum;
			printf("STSK: %d CHECKSUM = %lx\n", count, chksum);
		printf("SENDING TASK SIGNAL AGENTSEM\n");
		rt_sem_signal(agentsem);
	}
	printf("SENDING TASK LAST WAIT ON SHMSEM\n");
	rt_sem_wait(shmsem);
	printf("SENDING TASK SIGNALLED ON SHMSEM\n");
	shm[0] = 0;
	printf("SENDING TASK LAST SIGNAL TO AGENTSEM\n");
	rt_sem_signal(agentsem);
	printf("SENDING TASK DELETES ITSELF\n");
	rt_task_delete(sending_task);
	printf("END SENDING TASK\n");
	return 0;
}
예제 #16
0
파일: semtest.c 프로젝트: ArcEye/RTAI
void task1(void)
{
	rt_thread_init(nam2num("TASK1"), 1, 0, SCHED_FIFO, 0x1);
	rt_grow_and_lock_stack(STACK_SIZE - 10000);
#ifdef MAKE_HARD
	MAKE_HARD();
#endif	
	rt_make_hard_real_time();
	rt_printk("TASK1 TID = %d : ", rt_gettid());

	while (!end) {
		rt_sem_wait(sem1);
		rt_sem_signal(sem2);
	}

        rt_task_delete(NULL);
	rt_printk("TASK1 EXITING.\n");
	return;
}
예제 #17
0
void cleanup_module(void)
{
        /* DO NOT stop timer. RTmac needs the timer! */
	//stop_rt_timer(); 

        /* rt_task_delete     */ 
        rt_printk("rt_task_delete() = %d\n",rt_task_delete(&rt_task));

        /* close th rt-socket */
        closing = 1;
        rt_printk("begin close\n");
  	rt_printk("  rt_socket_close() = %d\n",rt_socket_close(sock));
  	rt_printk("end close\n");

	rt_sem_delete(&tx_sem);

	/* destroy the fifo   */
	rtf_destroy(PRINT);
}
예제 #18
0
/* alarm_handler 
** is triggered once 10s is passed to inform player 
** wait time has expired - issue start
*/
void alarm_handler(void *arg) 
{
     int sock = *(int *)&arg;
     int echolen;
    
     /* start the countdown */
     rt_task_set_periodic(NULL, TM_NOW, 8000000000ULL);
     rt_task_wait_period(NULL); 

     if(!issuedStart)
       rt_task_delete(NULL); //not need two players connected

     rt_mutex_acquire(&autoStart, TM_INFINITE);
     issuedStart = true;
     rt_mutex_release(&autoStart);
     AIMode = true;
      
     printf("FORCED START client playing with AI!\n");
     /* below we emulate the add, start */
     addPong();     
     echolen = strlen(pongData[0]);
     if(send(sock, pongData[0],echolen, 0) != echolen)
     	rt_err("send()");
     echolen = strlen(pongData[1]);
     if(send(sock, pongData[1],echolen, 0) != echolen) 
     	rt_err("send()");

     start(); 
     echolen = strlen(gameData);
     if(send(sock, gameData, echolen, 0) != echolen)
     	 rt_err("send()");

     echolen = strlen(ballData);
     if(send(sock, ballData, echolen, 0) != echolen)
	 rt_err("send()");

     if(rt_task_resume(&recvThread[0]))
	rt_err("rt_task_resume()");
     if(rt_task_resume(&ballThread))	
	 rt_err("rt_task_resume()");

}
예제 #19
0
void cleanup_module(void)
{
    rt_shutdown_irq(parirq);
    rt_free_global_irq(parirq);

    outb(0, PAR_CONTROL);

    /* Important: First close the socket! */
    while (rt_socket_close(sock) == -EAGAIN) {
        printk("rt_server: Socket busy - waiting...\n");
        set_current_state(TASK_INTERRUPTIBLE);
        schedule_timeout(1*HZ); /* wait a second */
    }

    rt_printk("rt_task_delete() = %d\n",rt_task_delete(&rt_task));

    rt_sem_delete(&tx_sem);

    rtf_destroy(PRINT_FIFO);
}
예제 #20
0
void loop(void *arg){
	Matrix outputMatrix=empty_matrix(1,1);
	RT_TASK pwm_task;

	lpt_init();

	rt_task_spawn(&pwm_task,NULL,0,gs->task_prio,0,&pwm,NULL);

	while (running) {
		read_inputs();
		
		//outputMatrix=periodic_function(io.input_result,io.input_num);

		write_outputs(outputMatrix);
	}

	rt_task_delete(&pwm_task);

	lpt_close();
}
예제 #21
0
void lMotor_stop(void *arg)
{
//      rt_task_delete(&rMotor_task);
        int fd;
        char buf[MAX_BUF];
        RTIME now, previous;
        long MAX = 0;
        int flag = 1;

        //Turn off
        snprintf(buf, sizeof(buf), "/sys/devices/ocp.3/pwm_test_P9_22.13/duty"); 
        rt_task_set_periodic(NULL, TM_NOW, period_motorStop);
        rt_printf("Running left motor STOP task!\n");

        while (1){
                rt_task_wait_period(NULL);
                previous = rt_timer_read();
                if(flagStop){
		      rt_task_delete(&lMotor_task);
                        fd = open(buf, O_RDWR); 
                        if(fd < 0){
                                perror("Problem opening Duty file - leeft motor");
                        }
                        //Duty 0 to stop
                        write(fd, "0", 5); 
                        close(fd);
                        rt_printf("LMotor stopped \n");
                        now = rt_timer_read();
                        if (flag){
                                MAX = now- previous;
                                flag = 0;
                        }

                        if((long)((now - previous)) > MAX){
                                MAX = (long)((now - previous)) ;
                        }
                        rt_printf("WCET Left Motor Stop: %ld \n", MAX);
                }

	}
}
예제 #22
0
static void bfun(int t)
{
	RT_TASK *mytask;
	int msg[MAXSIZ + 1], mtype, i, n;
	RT_MSGQ *smbx, *rmbx[NTASKS];

	mytask = rt_thread_init(nam2num("BFUN"), 0, 0, SCHED_FIFO, 0xF);
	smbx = rt_msgq_init(nam2num("SMSG"), 0, 0);
	for (i = 0; i < NTASKS; i++) {
		char mname[6] = "RMBX";
		mname[4] = i + '0';
		mname[5] = 0;
		rmbx[i] = rt_msgq_init(nam2num(mname), 0, 0);
	}
	mlockall(MCL_CURRENT | MCL_FUTURE);
	rt_make_hard_real_time();

	rt_sem_wait_barrier(barrier);
	while (end < NTASKS) {
		rt_msg_receive(smbx, msg, sizeof(msg), &mtype);
		n = 0;
		for (i = 1; i < MAXSIZ; i++) {
			n += msg[i];
		}
		if (msg[MAXSIZ] != n) {
			rt_printk("SERVER RECEIVED AN UNKNOWN MSG.\n");
//			goto prem;
		}
if(end >= NTASKS) goto prem;
		msg[1] = 0xFFFFFFFF;
		rt_msg_send(rmbx[msg[0]], msg, 2*sizeof(int), RETPRIO);
	}
prem:
	for (i = 0; i < NTASKS; i++) {
		rt_msgq_delete(rmbx[i]);
	}
	rt_msgq_delete(smbx);
	rt_make_soft_real_time();
	rt_task_delete(mytask);
	printf("SERVER TASK ENDS.\n");
}
예제 #23
0
void cleanup_module(void)
{
        rt_shutdown_irq(parirq);
        rt_free_global_irq(parirq);

        outb(0, PAR_CONTROL);

        /* stop timer         */ 
  	stop_rt_timer();

        /* rt_task_delete     */ 
  	rt_task_delete(&rt_task);

        /* close th rt-socket */
  	rt_socket_close(sock);

	rt_sem_delete(&tx_sem);

	/* destroy the fifo   */
	rtf_destroy(PRINT);
}
예제 #24
0
int main () {
	//printf("Set signal handler\n");
	signal(SIGINT,cleanup);
	signal(SIGPIPE,cleanup);
	signal(SIGQUIT,cleanup);
	signal(SIGHUP,cleanup);
	signal(SIGTERM,cleanup);

	//printf("Get shure, that we will not beeing paged\n");
	mlockall(MCL_CURRENT|MCL_FUTURE);

#if 1
	if(ioperm(SOUND_PORT,1,1)){
		printf("NOT ALLOWED to use SoundPort\n");
	}
#endif


	rt_task_create(
		&beep_task,    // Task "object"
		"Beep Task",  // Taskname
		0, 	      		// stacksize
		99, 	      	// priority
		0             // option-flags
	);
	taskHasBeenStarted = 1;
	rt_task_start(
			&beep_task,	// Task 
			beep, 			// fuction pointer
			NULL				// Data
	);

	pause();

	rt_task_delete(
			&beep_task
	);
	
	return 0;
}
예제 #25
0
static void *Task1(void *arg)
{
	RT_TASK *t1;
	int unsent;
	MSG msg;
    
	t1 = rt_task_init_schmod(nam2num("T1"), BASE_PRIO + 1, 0, 0, SCHED_FIFO, 0xF);
	printf("\nTask1 (%p) starting\n", t1);
	mlockall(MCL_CURRENT | MCL_FUTURE);

	while (count < MAXCOUNT) {
		count++;
		msg.progressive = count;
		msg.sending_task = 1;
		unsent = rt_tbx_send(bx, (char*)&msg, sizeof(msg));
		printf("\nTask1=%lu, simple sending, unsent=%d\n", count, unsent);
		rt_sleep(nano2count(DELAY));
	}
	rt_task_delete(t1);
	printf("\nTask1 ends itself\n");
	return 0;
}                                        
예제 #26
0
static void *Task7(void *arg)
{
	RT_TASK *t7;
	int unsent;
	MSG msg;
    
	t7 = rt_task_init_schmod(nam2num("T7"), BASE_PRIO + 0, 0, 0, SCHED_FIFO, 0xF);
	printf("\nTask7 (%p) starting\n", t7);
	mlockall(MCL_CURRENT | MCL_FUTURE);

	while (count < MAXCOUNT) {
		count++;
		msg.progressive = count;
		msg.sending_task = 7;
		unsent = rt_tbx_urgent(bx, (char*)&msg, sizeof(msg));
		printf("\nTask7=%lu, urgent sending, unsent=%d\n", count, unsent);
		rt_sleep(nano2count(3*DELAY + 2*SHIFT));
	}
	rt_task_delete(t7);
	printf("\nTask7 ends itself\n");
	return 0;
}                                        
예제 #27
0
static void *Task4(void *arg)
{
	RT_TASK *t4;
	int wakedup;
	MSG msg;
    
	t4 = rt_task_init_schmod(nam2num("T4"), BASE_PRIO + 6, 0, 0, SCHED_FIFO, 0xF);
	printf("\nTask4 (%p) starting\n", t4);
	mlockall(MCL_CURRENT | MCL_FUTURE);

	while (count < MAXCOUNT) {
		count++;
		msg.progressive = count;
		msg.sending_task = 4;
		wakedup = rt_tbx_broadcast(bx, (char*)&msg, sizeof(msg));
		printf("\nTask4=%lu, sent broadcast, wakedup=%d\n", count, wakedup);
		rt_sleep(nano2count(DELAY + SHIFT));
	}
	rt_task_delete(t4);
	printf("\nTask4 ends itself\n");
	return 0;
}                                        
예제 #28
0
static void *thread_fun(void *arg)
{
	int mytask_indx;
	unsigned long msg;

	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
	mytask_indx = ((int *)arg)[0];
	if (!(mytask[mytask_indx] = rt_thread_init(taskname(mytask_indx), 0, 0,
SCHED_FIFO, 0x1))) {
		printf("CANNOT INIT TASK %u\n", taskname(mytask_indx));
		exit(1);
	}

	mlockall(MCL_CURRENT | MCL_FUTURE);
	rt_make_hard_real_time();
	hrt[mytask_indx] = 1;
	while (!end) {
		switch (change) {
			case 0:
				rt_task_suspend(mytask[mytask_indx]);
				break;
			case 1:
				rt_sem_wait(sem);
				break;
			case 2:
				rt_receive(NULL, &msg);
				break;
			case 3:
				rt_return(rt_receive(NULL, &msg), 0);
				break;
		}
	}
	rt_make_soft_real_time();

	rt_task_delete(mytask[mytask_indx]);
	hrt[mytask_indx] = 0;

	return (void*)0;
}
예제 #29
0
파일: display.c 프로젝트: ArcEye/RTAI
int main(void)
{
	fd_set input;
	struct timeval tv;
	unsigned int msg, ch;
	MBX *mbx;
	struct sample { long long min; long long max; int index; double s; int ts; } samp;

	tv.tv_sec = 0;

 	if (!(task = rt_task_init(nam2num("LATCHK"), 20, 0, 0))) {
		printf("CANNOT INIT MASTER TASK\n");
		exit(1);
	}

 	if (!(mbx = rt_get_adr(nam2num("LATMBX")))) {
		printf("CANNOT FIND MAILBOX\n");
		exit(1);
	}

	while (1) {
		rt_mbx_receive(mbx, &samp, sizeof(samp));
		printf("*** min: %d, max: %d average: %d, dot %f ts %d (ent ends check, a/ent both) ***\n", (int) samp.min, (int) samp.max, samp.index, samp.s, samp.ts);
		FD_ZERO(&input);
		FD_SET(0, &input);
		tv.tv_usec = 20000;
	        if (select(1, &input, NULL, NULL, &tv)) {
			ch = getchar();
			break;
		}
	}

	if (ch == 'a') {
		rt_rpc(rt_get_adr(nam2num("LATCAL")), msg, &msg);
	}
	rt_task_delete(task);
	exit(0);
}
예제 #30
0
int main(int argc, char* argv[])
{
signal(SIGTERM, catch_signal);
signal(SIGINT, catch_signal);
/* Avoids memory swapping for this program */
mlockall(MCL_CURRENT|MCL_FUTURE);
/*
* Arguments: &task,
* name,
* stack size (0=default),
* priority,
* mode (FPU, start suspended, ...)
*/
rt_task_create(&demo_task, "trivial", 0, 99, 0);
/*
* Arguments: &task,
* task function,
* function argument
*/
rt_task_start(&demo_task, &demo, NULL);
pause();
rt_task_delete(&demo_task);
}