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); }
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"); }
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); }
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"); }
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); }
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); }
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); }
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); }
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); }
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"); }
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); }
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"); }
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 }
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); }
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); }
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); }