From bd9e4d8e9bf50fd90e5495a1cd020dd4c3e985fe Mon Sep 17 00:00:00 2001 From: root Date: Sun, 13 Sep 2015 11:57:39 +0200 Subject: [PATCH] final commit assignment 2 --- mart/ex02/ex02d.c | 4 +- natanael/ex02/Explanation ex02.txt | 22 ------- natanael/ex02/Makefile | 102 ++--------------------------- natanael/ex02/ex02.c | 57 ---------------- natanael/ex02/ex02a.c | 36 ++++++++++ natanael/ex02/ex02b.c | 33 ++-------- natanael/ex02/ex02c.c | 34 ++-------- natanael/ex02/ex02d.c | 37 +++-------- natanael/ex02/explanation.txt | 28 ++++++++ 9 files changed, 93 insertions(+), 260 deletions(-) delete mode 100644 natanael/ex02/Explanation ex02.txt delete mode 100644 natanael/ex02/ex02.c create mode 100644 natanael/ex02/ex02a.c create mode 100644 natanael/ex02/explanation.txt diff --git a/mart/ex02/ex02d.c b/mart/ex02/ex02d.c index db51849..0408825 100644 --- a/mart/ex02/ex02d.c +++ b/mart/ex02/ex02d.c @@ -33,9 +33,7 @@ int main(int argc, char* argv[]) rt_task_create(&task2, "t2", 0, 50, 0); rt_task_create(&task3, "t3", 0, 50, 0); - uint64_t num1 = 1000000000LLU; - uint64_t num2 = 2000000000LLU; - uint64_t num3 = 3000000000LLU; + uint64_t num1 = 1000000000LLU, num2 = 2000000000LLU, num3 = 3000000000LLU; rt_task_start(&task1, &demo, (void *)&num1); rt_task_start(&task2, &demo, (void *)&num2); diff --git a/natanael/ex02/Explanation ex02.txt b/natanael/ex02/Explanation ex02.txt deleted file mode 100644 index e3502bf..0000000 --- a/natanael/ex02/Explanation ex02.txt +++ /dev/null @@ -1,22 +0,0 @@ -DES group members: -Natanael Adityasatria 4417992 -Mart Lubbers - -2a -The output describes the first task is the task that is first executed by the syntax rt_task_start. So the task order is ordered from the source code's order (in this case: inside loop, the lowest counter will be run first) - -2b -The output describes that we can pass the integer argument that belongs to the task. In addition to the task name (string), the task can also has an integer value. - -2c -There is no differences in the output with the exercise 2b. -The order is the same as in exercise 2b. -From the source code, this is because we put each of tasks in a loop. -So the first task created and the first task started in the loop will -be run first time. For the next loop, it will create and start the -next task. So it is like the matter of the code order not the task -priority. - -2d -It is because we use Sleep of 1 second then the loop(while) will be run every one second. All tasks have the same priority, but each of tasks has different periods. -The first task that has period of 1 will be run every seconds while the task that has period of 2 will be run once in two seconds. In addition, the task that has period of 3 will be run once in three seconds. \ No newline at end of file diff --git a/natanael/ex02/Makefile b/natanael/ex02/Makefile index d039644..0511f0e 100644 --- a/natanael/ex02/Makefile +++ b/natanael/ex02/Makefile @@ -1,99 +1,9 @@ -###### CONFIGURATION ###### +CFLAGS=$(shell xeno-config --xeno-cflags) -lnative -lrtdk +LDFLAGS=$(shell xeno-config --xeno-ldflags) -### List of applications to be build -APPLICATIONS = ex02 +BINARIES=$(addprefix ex02,a b c d) -### Note: to override the search path for the xeno-config script, use "make XENO=..." +all: $(BINARIES) - -### List of modules to be build -MODULES = ex02 - -### Note: to override the kernel source path, use "make KSRC=..." - - - -###### USER SPACE BUILD (no change required normally) ###### -ifeq ($(KERNELRELEASE),) -ifneq ($(APPLICATIONS),) - -### Default Xenomai installation path -XENO ?= /usr/xenomai - -XENOCONFIG=$(shell PATH=$(XENO):$(XENO)/bin:$(PATH) which xeno-config 2>/dev/null) - -### Sanity check -ifeq ($(XENOCONFIG),) -all:: - @echo ">>> Invoke make like this: \"make XENO=/path/to/xeno-config\" <<<" - @echo -endif - - -CC=$(shell $(XENOCONFIG) --cc) - -CFLAGS=$(shell $(XENOCONFIG) --xeno-cflags) $(MY_CFLAGS) - -LDFLAGS=$(shell $(XENOCONFIG) --xeno-ldflags) $(MY_LDFLAGS) -lnative - -# This includes the library path of given Xenomai into the binary to make live -# easier for beginners if Xenomai's libs are not in any default search path. -LDFLAGS+=-Xlinker -rpath -Xlinker $(shell $(XENOCONFIG) --libdir) - -LDFLAGS+= -lrtdk - -all:: $(APPLICATIONS) - -clean:: - $(RM) $(APPLICATIONS) *.o - -endif -endif - - - -###### SPECIAL TARGET RULES ###### -rtprint: rtprint.c - $(CC) $(CFLAGS) $? $(LDFLAGS) -lrtdk -o $@ - - - -###### KERNEL MODULE BUILD (no change required normally) ###### -ifneq ($(MODULES),) - -### Default to sources of currently running kernel -KSRC ?= /lib/modules/$(shell uname -r)/build - -OBJS := ${patsubst %, %.o, $(MODULES)} -CLEANMOD := ${patsubst %, .%*, $(MODULES)} -PWD := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi) - -### Kernel 2.6 -ifeq ($(findstring 2.6,$(KSRC)),2.6) - -obj-m := $(OBJS) -EXTRA_CFLAGS := -I$(KSRC)/include/xenomai -I$(KSRC)/include/xenomai/posix $(ADD_CFLAGS) - -all:: - $(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules - -### Kernel 2.4 -else - -ARCH ?= $(shell uname -i) -INCLUDE := -I$(KSRC)/include/xenomai -I$(KSRC)/include/xenomai/compat -I$(KSRC)/include/xenomai/posix -CFLAGS += $(shell $(MAKE) -s -C $(KSRC) CC=$(CC) ARCH=$(ARCH) SUBDIRS=$(PWD) modules) $(INCLUDE) - -all:: $(OBJS) - -endif - -## Target for capturing 2.4 module CFLAGS -modules: - @echo "$(CFLAGS)" - -clean:: - $(RM) $(CLEANMOD) *.o *.ko *.mod.c Module*.symvers - $(RM) -R .tmp* - -endif \ No newline at end of file +clean: + $(RM) -v $(BINARIES) *.o diff --git a/natanael/ex02/ex02.c b/natanael/ex02/ex02.c deleted file mode 100644 index e3ecdc8..0000000 --- a/natanael/ex02/ex02.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include -#include - -#include -#include - -#include -RT_TASK demo_task; - -void demo(void *arg) -{ - RT_TASK *curtask; - RT_TASK_INFO curtaskinfo; - - // inquire current task - curtask=rt_task_self(); - rt_task_inquire(curtask,&curtaskinfo); - - // print task name - rt_printf("Task name : %s \n", curtaskinfo.name); -} - -int main(int argc, char* argv[]) -{ - char str[10] ; - int i; - - // Perform auto-init of rt_print buffers if the task doesn't do so - rt_print_auto_init(1); - - // Lock memory : avoid memory swapping for this program - mlockall(MCL_CURRENT|MCL_FUTURE); - - rt_printf("start task\n"); - - for (i=0; i<5; i++) - { - /* - * Arguments: &task, - * name, - * stack size (0=default), - * priority, - * mode (FPU, start suspended, ...) - */ - sprintf(str,"hello-%d",i); - rt_task_create(&demo_task, str, 0, 50, 0); - /* - * Arguments: &task, - * task function, - * function argument - */ - rt_task_start(&demo_task, &demo, 0); - } - -} \ No newline at end of file diff --git a/natanael/ex02/ex02a.c b/natanael/ex02/ex02a.c new file mode 100644 index 0000000..072ff69 --- /dev/null +++ b/natanael/ex02/ex02a.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +#include +#include + +#include +RT_TASK demo_task; + +void demo(void *arg) +{ + RT_TASK *curtask; + RT_TASK_INFO curtaskinfo; + curtask=rt_task_self(); + rt_task_inquire(curtask, &curtaskinfo); + rt_printf("Task name : %s\n", curtaskinfo.name); +} + +int main(int argc, char* argv[]) +{ + char str[10] ; + int i; + + rt_print_auto_init(1); + mlockall(MCL_CURRENT | MCL_FUTURE); + rt_printf("start task\n"); + + for (i=0; i<5; i++) + { + sprintf(str,"hello-%d",i); + rt_task_create(&demo_task, str, 0, 50, 0); + rt_task_start(&demo_task, &demo, 0); + } +} diff --git a/natanael/ex02/ex02b.c b/natanael/ex02/ex02b.c index d598b82..57bd961 100644 --- a/natanael/ex02/ex02b.c +++ b/natanael/ex02/ex02b.c @@ -11,16 +11,12 @@ RT_TASK demo_task; void demo(void *arg) { + int num = * (int *)arg; RT_TASK *curtask; RT_TASK_INFO curtaskinfo; - - // inquire current task curtask=rt_task_self(); - rt_task_inquire(curtask,&curtaskinfo); - - // print task name - int num = * (int *)arg; - rt_printf("Task name : %s - Argument %d \n", curtaskinfo.name,num); + rt_task_inquire(curtask, &curtaskinfo); + rt_printf("Task name: %s - Argument %d\n", curtaskinfo.name, num); } int main(int argc, char* argv[]) @@ -28,31 +24,14 @@ int main(int argc, char* argv[]) char str[10] ; int i; - // Perform auto-init of rt_print buffers if the task doesn't do so rt_print_auto_init(1); - - // Lock memory : avoid memory swapping for this program - mlockall(MCL_CURRENT|MCL_FUTURE); - + mlockall(MCL_CURRENT| MCL_FUTURE); rt_printf("start task\n"); for (i=0; i<5; i++) { - /* - * Arguments: &task, - * name, - * stack size (0=default), - * priority, - * mode (FPU, start suspended, ...) - */ - sprintf(str,"hello-%d",i); + sprintf(str, "hello-%d", i); rt_task_create(&demo_task, str, 0, 50, 0); - /* - * Arguments: &task, - * task function, - * function argument - */ rt_task_start(&demo_task, &demo, &i); } - -} \ No newline at end of file +} diff --git a/natanael/ex02/ex02c.c b/natanael/ex02/ex02c.c index 9411d1b..fc2ce72 100644 --- a/natanael/ex02/ex02c.c +++ b/natanael/ex02/ex02c.c @@ -11,16 +11,12 @@ RT_TASK demo_task; void demo(void *arg) { + int num = * (int *)arg; RT_TASK *curtask; RT_TASK_INFO curtaskinfo; - - // inquire current task curtask=rt_task_self(); - rt_task_inquire(curtask,&curtaskinfo); - - // print task name - int num = * (int *)arg; - rt_printf("Task name : %s - Argument %d \n", curtaskinfo.name,num); + rt_task_inquire(curtask, &curtaskinfo); + rt_printf("Task name: %s - Argument %d\n", curtaskinfo.name, num); } int main(int argc, char* argv[]) @@ -28,32 +24,14 @@ int main(int argc, char* argv[]) char str[10] ; int i; - // Perform auto-init of rt_print buffers if the task doesn't do so rt_print_auto_init(1); - - // Lock memory : avoid memory swapping for this program - mlockall(MCL_CURRENT|MCL_FUTURE); - + mlockall(MCL_CURRENT | MCL_FUTURE); rt_printf("start task\n"); for (i=0; i<5; i++) { - /* - * Arguments: &task, - * name, - * stack size (0=default), - * priority, - * mode (FPU, start suspended, ...) - */ - sprintf(str,"hello-%d",i); + sprintf(str, "hello-%d", i); rt_task_create(&demo_task, str, 0, 50+i, 0); - - /* - * Arguments: &task, - * task function, - * function argument - */ rt_task_start(&demo_task, &demo, &i); } - -} \ No newline at end of file +} diff --git a/natanael/ex02/ex02d.c b/natanael/ex02/ex02d.c index f54ded3..a77e783 100644 --- a/natanael/ex02/ex02d.c +++ b/natanael/ex02/ex02d.c @@ -11,24 +11,23 @@ RT_TASK demo_task; void demo(void *arg) { - sleep(1); RT_TASK *curtask; RT_TASK_INFO curtaskinfo; // Read system clock RTIME period = 1e9; + rt_task_sleep(period); // inquire current task curtask=rt_task_self(); rt_task_inquire(curtask,&curtaskinfo); // determine the period - int num = * (int *)arg; - period*=num; - rt_task_set_periodic(NULL,TM_NOW,period); + int num = *(int *)arg; + period *= num; + rt_task_set_periodic(NULL, TM_NOW, period); while(1){ - // print task name - rt_printf("Task name : %s - Period %d \n", curtaskinfo.name,num); + rt_printf("Task name: %s - Period %d\n", curtaskinfo.name, num); rt_task_wait_period(NULL); } } @@ -39,34 +38,18 @@ int main(int argc, char* argv[]) int i; int periods[3]; - // Perform auto-init of rt_print buffers if the task doesn't do so rt_print_auto_init(1); - - // Lock memory : avoid memory swapping for this program - mlockall(MCL_CURRENT|MCL_FUTURE); - + mlockall(MCL_CURRENT | MCL_FUTURE); rt_printf("start task\n"); for (i=0; i<3; i++) { - /* - * Arguments: &task, - * name, - * stack size (0=default), - * priority, - * mode (FPU, start suspended, ...) - */ - sprintf(str,"hello-%d",i); - periods[i]=i+1; + sprintf(str, "hello-%d", i); + periods[i] = i + 1; rt_task_create(&demo_task, str, 0, 50, 0); - - /* - * Arguments: &task, - * task function, - * function argument - */ rt_task_start(&demo_task, &demo, &periods[i]); } + rt_printf("end program by CTRL-C\n"); pause(); -} \ No newline at end of file +} diff --git a/natanael/ex02/explanation.txt b/natanael/ex02/explanation.txt new file mode 100644 index 0000000..cb778d4 --- /dev/null +++ b/natanael/ex02/explanation.txt @@ -0,0 +1,28 @@ +DES group members: +Natanael Adityasatria s4417992 +Mart Lubbers s4109503 + +2a +The output describes the first task is the task that is first executed by the +syntax rt_task_start. So the task order is ordered from the source code's order +(in this case: inside loop, the lowest counter will be run first) + +2b +The output describes that we can pass the integer argument that belongs to the +task. In addition to the task name (string), the task can also has an integer +value. + +2c +There is no differences in the output with the exercise 2b. +The order is the same as in exercise 2b. +From the source code, this is because we put each of tasks in a loop. So the +first task created and the first task started in the loop will be run first +time. For the next loop, it will create and start the next task. So it is like +the matter of the code order not the task priority. + +2d +It is because we use Sleep of 1 second then the loop(while) will be run every +one second. All tasks have the same priority, but each of tasks has different +periods. The first task that has period of 1 will be run every seconds while +the task that has period of 2 will be run once in two seconds. In addition, the +task that has period of 3 will be run once in three seconds. -- 2.20.1