From a03d9fbf44537be90a5bca12f6f948b4f29a4825 Mon Sep 17 00:00:00 2001 From: Thanassis Tsiodras Date: Mon, 4 Apr 2016 17:05:01 +0200 Subject: [PATCH] Added a non-FPU task in the example --- EDISOFT/Makefile | 5 +++-- EDISOFT/src/init.c | 7 ++++--- EDISOFT/src/system.h | 3 ++- EDISOFT/src/task1.c | 2 +- EDISOFT/src/task2.c | 19 +++++++++++++++++++ OAR/Makefile | 7 ++++--- OAR/src/init.c | 8 ++++---- OAR/src/system.h | 3 ++- OAR/src/task1.c | 2 +- OAR/src/task2.c | 21 +++++++++++++++++++++ 10 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 EDISOFT/src/task2.c create mode 100644 OAR/src/task2.c diff --git a/EDISOFT/Makefile b/EDISOFT/Makefile index 2f89475..b8f0403 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 ea0be7b..84b78ea 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 07a0616..5e272b2 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 728373a..8db9fe8 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 0000000..22b6d32 --- /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 71ca2c9..af516b6 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 7a64092..4d4b5ea 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 80710b9..c1b70d7 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 b04189e..8fa7f47 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 0000000..3d356cb --- /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); +} -- GitLab