예제 #1
0
void lowFunc() {
	rt_sem_p(&sem, TM_INFINITE);
	rt_mutex_acquire(&resourceMutex, TM_INFINITE);
	rt_printf("low locks resource\n");
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	rt_printf("low unlocks resource\n");
	rt_mutex_release(&resourceMutex);
}
예제 #2
0
void medium(){
	rt_sem_p(&synca, TM_INFINITE);
	rt_task_sleep_ms(100);
	rt_printf("MEDIUM RUNNING\n");
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	rt_printf("MEDIUM FINISHED\n");
}
예제 #3
0
void highFunc() {
	rt_sem_p(&sem, TM_INFINITE);
	rt_task_sleep_ms(200);
	rt_printf("High wants to lock resource\n");
	rt_mutex_acquire(&resourceMutex, TM_INFINITE);
	rt_printf("High locks resource\n");
	busy_wait_ms(100);
	busy_wait_ms(100);
	rt_printf("High unlocks resource\n");
	rt_mutex_release(&resourceMutex);
}
예제 #4
0
void medFunc() {
	rt_sem_p(&sem, TM_INFINITE);
	rt_task_sleep_ms(100);
	rt_printf("med starts running\n");
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	rt_printf("med finished\n");
}
예제 #5
0
파일: main.c 프로젝트: eirikpre/TTK4147
void task_H(void* data)
{
	rt_sem_p(&syncsem,TM_INFINITE);
	rt_task_sleep_ms(1);
	rt_sem_p(&semB,TM_INFINITE);
	rt_printf("H : I got B\n");
	busy_wait_ms(1);
	rt_sem_p(&semA,TM_INFINITE);
	busy_wait_ms(2);
	print_pri(NULL,(char) data);
	rt_sem_v(&semB);
	rt_sem_v(&semA);
}
예제 #6
0
void high(){
	rt_sem_p(&synca, TM_INFINITE);
	rt_task_sleep_ms(200);
	rt_printf("HIGH RUNNING\n");
	rt_sem_p(&semaphore, TM_INFINITE);
	//rt_mutex_acquire(&mutex, TM_INFINITE);
	rt_printf("HIGH AQUIRED LCOK\n");
	busy_wait_ms(100);
	busy_wait_ms(100);
	rt_printf("HIGH FINISHED\n");
	rt_sem_v(&semaphore);
	//rt_mutex_release(&mutex);
	
}
예제 #7
0
void low(){
	rt_sem_p(&synca, TM_INFINITE);
	rt_printf("LOW RUNNING\n");
	rt_sem_p(&semaphore, TM_INFINITE);
	//rt_mutex_acquire(&mutex, TM_INFINITE);
	rt_printf("LOW AQUIRED LOCK\n");
	busy_wait_ms(100);
	busy_wait_ms(100);
	busy_wait_ms(100);
	rt_printf("LOW FINISHED\n");
	rt_sem_v(&semaphore);
	//rt_mutex_release(&mutex);
	
}
예제 #8
0
파일: main.c 프로젝트: eirikpre/TTK4147
void task_L(void* data)
{
	rt_sem_p(&syncsem,TM_INFINITE);
	
	rt_sem_p(&semA,TM_INFINITE);
	int prio = rt_task_set_priority(NULL,99);
	rt_printf("L : I got A\n");
	busy_wait_ms(3);
	rt_sem_p(&semB,TM_INFINITE);
	busy_wait_ms(3);
	print_pri(NULL,(char) data);
	rt_sem_v(&semB);
	rt_sem_v(&semA);
}
예제 #9
0
void semWait2(){
	rt_task_sleep(1000000);
	rt_mutex_acquire(&b, 0);
	rt_printf("High pri task: lock b\n");
	busy_wait_ms(1);
	rt_mutex_acquire(&a, 0);
	rt_printf("High pri task: lock a\n");
	busy_wait_ms(2);
	rt_printf("High pri task: release a\n");
	rt_mutex_release(&a);
	rt_printf("High pri task: release b \n");
	rt_mutex_release(&b);
	busy_wait_ms(1);
	
	
}
예제 #10
0
void semWait1(){
	
	rt_mutex_acquire(&a, 0);
	rt_printf("Low pri task: lock a\n");
	//rt_timer_spin(3000000);
	busy_wait_ms(3);
	rt_mutex_acquire(&b, 0);
	rt_printf("Low pri task: lock b\n");
	busy_wait_ms(3);
	
	rt_printf("Low pri task: unlock b \n");
	rt_mutex_release(&b);
	rt_printf("Low pri task: unlock a \n");
	rt_mutex_release(&a);
	
	rt_printf("Low pri task: stop \n");
}
예제 #11
0
파일: main.c 프로젝트: eirikpre/TTK4147
void task_M(void* data)
{
	rt_sem_p(&syncsem,TM_INFINITE);
	rt_task_sleep_ms(1);
	//rt_sem_p(sem,TM_INFINITE);
	busy_wait_ms(5);
	print_pri(NULL,(char) data);
	//rt_sem_v(sem,TM_INFINITE);
}
예제 #12
0
파일: main.c 프로젝트: kringle/sannsys15
void taskM ( void ) {

	rt_sem_p(&xenomai_semaphore, TM_INFINITE); 	// wait for synch			
	print_pri(&taskMed, "TaskM started\n");
	rt_task_sleep(TIME_UNIT);
	print_pri(&taskMed, "TaskM starting work\n");

	busy_wait_ms(5*TIME_UNIT_MS);	
	print_pri(&taskMed, "TaskM complete\n");
}
예제 #13
0
파일: main.c 프로젝트: kringle/sannsys15
void taskL ( void ) {

	rt_sem_p(&xenomai_semaphore, TM_INFINITE); 	// wait for synch
	print_pri(&taskLow, "TaskL started\n");	
	rt_mutex_acquire(&resMut,NULL);	// lock resource
	print_pri(&taskLow, "TaskL locked resource\n");
	
	busy_wait_ms(3*TIME_UNIT_MS);
	print_pri(&taskLow, "TaskL completed work\n");
	print_pri(&taskLow, "TaskL released resource\n");
	rt_mutex_release(&resMut);			// release resource
	
}
예제 #14
0
static void task1(void *argpointer){
    /* get task method */
    int method = *((int *) argpointer);
    free(argpointer);
    int id = 1;

    sync_threads(id);

    rt_task_sleep(1000000);

    rt_printf("Task %i start\n", id);
    busy_wait_ms(5);
    rt_printf("Task %i stop \n", id);
}
예제 #15
0
static void task0(void *argpointer){
    /* get task method */
    int method = *((int *) argpointer);
    free(argpointer);
    int id = 0;

    sync_threads(id);

    /* get resource */
    get_resource(method, id);

    /* do work */
    rt_printf("Task %i start\n", id);
    busy_wait_ms(3);
    
    /* release resource */
    release_resource(method, id);
}
예제 #16
0
static void task2(void *argpointer){
    /* get method */
    int method = *((int *) argpointer);
    free(argpointer);
    int id = 2;

    sync_threads(id);

    rt_task_sleep(2000000);

    /* Get resource */
    get_resource(method, id);
    
    /* Simulate work */
    rt_printf("Task %i start \n", id);
    busy_wait_ms(2);

    /* Release resource */
    release_resource(method, id);
}