diff --git a/EDISOFT/Makefile b/EDISOFT/Makefile index 2f89475dfb46250946514e3b63113415179e3143..b8f040338a0ea043567aff3fd165fd152b64df42 100644 --- a/EDISOFT/Makefile +++ b/EDISOFT/Makefile @@ -43,8 +43,9 @@ NONFPU_SRC= \ init.c \ ${EDISOFT_SRC} -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/EDISOFT/src/init.c b/EDISOFT/src/init.c index ea0be7b25aa43590aaae0e3b5711893215a04b0b..84b78eac6bfae3464f3d080c1a527883499d6f05 100644 --- a/EDISOFT/src/init.c +++ b/EDISOFT/src/init.c @@ -25,8 +25,9 @@ rtems_task Init(rtems_task_argument argument) Task_name[i], (rtems_task_priority) 2, RTEMS_MINIMUM_STACK_SIZE, - RTEMS_DEFAULT_MODES, - 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) { printk("Failed to rtems_task_create... status:%0x\n", status); @@ -36,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); } printk("Parent task sleeps for a second...\n"); diff --git a/EDISOFT/src/system.h b/EDISOFT/src/system.h index 07a06162869e8048932efb80b31e4161368a72a3..5e272b21e649ebd4bacfdc638eb7b5ae4604a478 100644 --- a/EDISOFT/src/system.h +++ b/EDISOFT/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/EDISOFT/src/task1.c b/EDISOFT/src/task1.c index 728373a8124f3c534b98c96633a51e220432bd1b..8db9fe882fb28959ddf3be96472625dee710a129 100644 --- a/EDISOFT/src/task1.c +++ b/EDISOFT/src/task1.c @@ -1,7 +1,7 @@ #include "system.h" #include "printk.h" -rtems_task Task_EntryPoint(rtems_task_argument argument) +rtems_task Task1_EntryPoint(rtems_task_argument argument) { int task_no = (int) argument; printk("Inside task %d...\n", task_no); diff --git a/EDISOFT/src/task2.c b/EDISOFT/src/task2.c new file mode 100644 index 0000000000000000000000000000000000000000..22b6d329ea3f71ace9e738c9b8306cec7f5e7e86 --- /dev/null +++ b/EDISOFT/src/task2.c @@ -0,0 +1,19 @@ +#include "system.h" +#include "printk.h" + +rtems_task Task2_EntryPoint(rtems_task_argument argument) +{ + int task_no = (int) argument; + printk("Inside task %d...\n", task_no); + + int j; + long long int dummy = 0; + for(j=0; j<100000; j++) { + int k; + for(k=0; k<100; k++) + dummy ^= k; + dummy++; + } + printk("Computed value by task %d was %d,%d\n", task_no, dummy&0xffffffff, dummy>>32); + rtems_task_delete(RTEMS_SELF); +} 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); +}