diff --git a/OAR/Makefile b/OAR/Makefile index 71ca2c9e5ee45c87c533a48829f44193504d5612..af516b6f72db4bddb5ac43e0585ce6ea988a570e 100644 --- a/OAR/Makefile +++ b/OAR/Makefile @@ -25,11 +25,12 @@ endif # Your source files: regardless of where they reside in the source tree, # VPATH will locate them... -NONFPU_SRC= \ +NONFPU_SRC= \ init.c -FPU_SRC= \ - task1.c +FPU_SRC= \ + task1.c \ + task2.c # Build a Dependency list and an Object list, by replacing the .c # extension to .d for dependency files, and .o for object files. diff --git a/OAR/src/init.c b/OAR/src/init.c index 7a6409284d4b31d7888c7aad0916c77a5fde3deb..4d4b5ea4af03ac91e4ba1d247ea8b863c66f2f3f 100644 --- a/OAR/src/init.c +++ b/OAR/src/init.c @@ -25,9 +25,9 @@ rtems_task Init(rtems_task_argument argument) Task_name[i], (rtems_task_priority) 2, RTEMS_MINIMUM_STACK_SIZE, - RTEMS_DEFAULT_MODES, // use RTEMS_DEFAULT_MODES | RTEMS_TIMESLICE for Linux/Windows like - // handling of tasks with same priority (i.e. pre-emption) - RTEMS_FLOATING_POINT, // use RTEMS_DEFAULT_ATTRIBUTES for non-native FPU tasks + RTEMS_DEFAULT_MODES, // use RTEMS_DEFAULT_MODES | RTEMS_TIMESLICE for Linux/Windows like + // handling of tasks with same priority (i.e. pre-emption) + i == 0 ? RTEMS_FLOATING_POINT : RTEMS_DEFAULT_ATTRIBUTES, &Task_id[i]); if (status != RTEMS_SUCCESSFUL) { printf("Failed to rtems_task_create... status:%0x\n", status); @@ -37,7 +37,7 @@ rtems_task Init(rtems_task_argument argument) // Start Task status = rtems_task_start( Task_id[i], - Task_EntryPoint, + i == 0 ? Task1_EntryPoint : Task2_EntryPoint, i); } printf("Parent task sleeps for a second...\n"); diff --git a/OAR/src/system.h b/OAR/src/system.h index 80710b98e06835a16da37345f5b8c6f9ea93babb..c1b70d78c2306ddcd0d2f415c6bf329edc0688c0 100644 --- a/OAR/src/system.h +++ b/OAR/src/system.h @@ -3,7 +3,8 @@ #include rtems_task Init(rtems_task_argument argument); -rtems_task Task_EntryPoint(rtems_task_argument argument); +rtems_task Task1_EntryPoint(rtems_task_argument argument); +rtems_task Task2_EntryPoint(rtems_task_argument argument); #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_MAXIMUM_TASKS 64 diff --git a/OAR/src/task1.c b/OAR/src/task1.c index b04189e7160251b640f3c776cf6f84716eb0586b..8fa7f4705eb4d9203da591f0b44625ef5b27f596 100644 --- a/OAR/src/task1.c +++ b/OAR/src/task1.c @@ -1,7 +1,7 @@ #include "system.h" #include -rtems_task Task_EntryPoint(rtems_task_argument argument) +rtems_task Task1_EntryPoint(rtems_task_argument argument) { int task_no = (int) argument; printf("Inside task %d...\n", task_no); diff --git a/OAR/src/task2.c b/OAR/src/task2.c new file mode 100644 index 0000000000000000000000000000000000000000..3d356cb8fb5045ef13c1c2d16c402b5611e2cc7a --- /dev/null +++ b/OAR/src/task2.c @@ -0,0 +1,21 @@ +#include "system.h" +#include + +rtems_task Task2_EntryPoint(rtems_task_argument argument) +{ + int task_no = (int) argument; + printf("Inside task %d...\n", task_no); + fflush(stdout); + //rtems_task_wake_after(100); + + int j; + long long int dummy = 0; + for(j=0; j<100000; j++) { + int k; + for(k=0; k<100; k++) + dummy ^= k; + dummy++; + } + printf("Computed value by task %d was %lld\n", task_no, dummy); + rtems_task_delete(RTEMS_SELF); +}