All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] VxWorks semaphore usage demo
@ 2007-09-03 15:13 Ravid Baruch Naali
  2007-09-03 15:32 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 7+ messages in thread
From: Ravid Baruch Naali @ 2007-09-03 15:13 UTC (permalink / raw)
  To: xenomai

[-- Attachment #1: Type: text/plain, Size: 257 bytes --]

Hello again,


I'm not sure what is the preferred way to commit my changes, so before I 
commit i'm Attaching my patch in order to get you remarks and further 
instructions


Thanks

-- 
Ravid Baruch Naali
ravidbn@domain.hid
+972 4 6732729
+972 52 5830021


[-- Attachment #2: vxworks_demo.2960.patch --]
[-- Type: text/x-patch, Size: 3733 bytes --]

Index: ksrc/skins/vxworks/demos/sem.c
===================================================================
--- ksrc/skins/vxworks/demos/sem.c	(revision 0)
+++ ksrc/skins/vxworks/demos/sem.c	(revision 0)
@@ -0,0 +1,104 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <vxworks/vxworks.h>
+#include <sys/mman.h>
+
+
+#define TASK_NUM 10
+#define STACK_SIZE 1024
+#define xnarch_printf printf
+
+SEM_ID semID, syncSEM;
+
+void taskMain(long arg1, long arg2, long arg3, long arg4, long arg5, long arg6, long arg7, long arg8, long arg9, long arg10)
+{
+    int localerrno;
+    //Waiting to start synchronized with all other spawned tasks
+    semTake(syncSEM, WAIT_FOREVER);
+    //Taking the counting semaphore to indicate task started running, 
+    //stall main from exiting 
+    STATUS result = semTake(semID, WAIT_FOREVER);
+    //Chaking for failures
+    if(result == ERROR){
+	localerrno = errnoGet();
+	//checking failure reason
+	switch(localerrno){
+	    case S_objLib_OBJ_ID_ERROR:
+		xnprintf( "Semaphore ID is invalid\n");
+		break;
+	    case S_objLib_OBJ_UNAVAILABLE:
+		xnprintf( "Semaphore unavailable (NO_WAIT)\n");
+		break;
+	    case S_objLib_OBJ_TIMEOUT:
+		xnprintf( "Timeout occured before semaphore was released\n");
+		break;
+	    case S_semLib_INVALID_OPTION:
+		xnprintf( "Semaphore type is invalid\n");
+		break;
+	    case EINTR:
+		xnprintf( "Received interup\n");
+		break;
+	    default:
+		break;
+	}
+	return;
+    }
+    
+    int i = 10;
+    //Getting this task's ID
+    int ownID = taskIdSelf();
+    //Getting this task's pririty
+    int priority;
+    result = taskPriorityGet(ownID, &priority);
+    
+    xnprintf( "My priority is %d\n", priority);
+    while(i){
+	    printf("My name is %s my tid=%d\n", taskName(ownID), ownID);
+	    sleep(1);
+	    i--;
+    }
+    //Signaling main that this task as finished
+    semGive(semID);
+    //Not realy required but releasing semaphore
+    semGive(syncSEM);
+}
+
+
+int main(int argc, char **argv)
+{
+	
+    mlockall(MCL_CURRENT|MCL_FUTURE);
+    int tidStat;
+    int tids[TASK_NUM];
+    //Creating counting semaphore on which main waits until all tasks are done
+    semID = semCCreate(SEM_Q_PRIORITY, TASK_NUM);
+    if(!semID){
+	xnprintf( "Failed to create semaphore\n");
+	exit(1);
+    }
+    //Creating a binary semaphore to sync all tasks 
+    syncSEM = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY);
+    if(!syncSEM){
+	xnprintf( "Failed to create binary semaphore\n");
+	exit(1);
+    }
+    //creating all the tasks 
+    int i;
+    for(i = 0; i < TASK_NUM; i++){
+	tids[i] = taskSpawn(NULL, 25-i, 0, STACK_SIZE , taskMain,0,0,0,0,0,0,0,0,0,0);
+	xnprintf( "Spawned task: %d\n", tids[i]);
+    }
+    //Giving all tasks a signal to start
+    semFlush(syncSEM);
+    //Waiting for all task to complete their main routine
+    semTake(semID, WAIT_FOREVER);
+    for(i = 0; i < TASK_NUM; i++)
+	taskDelete(tids[i]);
+    semDelete(semID);
+    semDelete(syncSEM);
+}
Index: ksrc/skins/vxworks/demos/Makefile
===================================================================
--- ksrc/skins/vxworks/demos/Makefile	(revision 2960)
+++ ksrc/skins/vxworks/demos/Makefile	(working copy)
@@ -7,7 +7,7 @@
 
 STD_CFLAGS  := $(shell $(XENO_CONFIG) --xeno-cflags)
 STD_LDFLAGS := $(shell $(XENO_CONFIG) --xeno-ldflags) -lvxworks
-STD_TARGETS := satch
+STD_TARGETS := satch sem
 
 GCIC := $(prefix)/bin/gcic
 SIM_CFLAGS  := -g
@@ -27,6 +27,9 @@
 satch: satch.c
 	$(CC) -o $@ $< $(STD_CFLAGS) $(STD_LDFLAGS)
 
+sem: sem.c
+	$(CC) -o $@ $< $(STD_CFLAGS) $(STD_LDFLAGS)
+
 satch_sim: satch_sim.o
 	$(GCIC) -o $@ $< $(SIM_LDFLAGS)
 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Xenomai-core] [PATCH] VxWorks semaphore usage demo
  2007-09-03 15:13 [Xenomai-core] [PATCH] VxWorks semaphore usage demo Ravid Baruch Naali
@ 2007-09-03 15:32 ` Gilles Chanteperdrix
  2007-09-03 17:17   ` Philippe Gerum
  2007-09-03 20:57   ` Ravid Baruch Naali
  0 siblings, 2 replies; 7+ messages in thread
From: Gilles Chanteperdrix @ 2007-09-03 15:32 UTC (permalink / raw)
  To: Ravid Baruch Naali; +Cc: xenomai

On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
> Hello again,

Hi,

>
>
> I'm not sure what is the preferred way to commit my changes, so before I
> commit i'm Attaching my patch in order to get you remarks and further
> instructions

The synchronization on tasks completion with the semID semaphore seems
broken. The main thread will get the semahore when the first task
completes, not when all the tasks complete.

I see too many comments, for instance:
// Checking for failures
if (error == ERROR)

is useless, it is pretty obvious from reading the code that you are
checking for failure. Comments should tell us things that are not
obvious.

Now, about the style, this is C code, so use C style comments. I would
also prefer that you use the kernel coding style, but this is not
kernel code, so I am not sure the rule is to use the kernel coding
style.
-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Xenomai-core] [PATCH] VxWorks semaphore usage demo
  2007-09-03 15:32 ` Gilles Chanteperdrix
@ 2007-09-03 17:17   ` Philippe Gerum
  2007-09-03 17:29     ` Ravid Baruch Naali
  2007-09-03 20:57   ` Ravid Baruch Naali
  1 sibling, 1 reply; 7+ messages in thread
From: Philippe Gerum @ 2007-09-03 17:17 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: Ravid Baruch Naali, xenomai

On Mon, 2007-09-03 at 17:32 +0200, Gilles Chanteperdrix wrote:
> On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
> > Hello again,
> 
> Hi,
> 
> >
> >
> > I'm not sure what is the preferred way to commit my changes, so before I
> > commit i'm Attaching my patch in order to get you remarks and further
> > instructions
> 
> The synchronization on tasks completion with the semID semaphore seems
> broken. The main thread will get the semahore when the first task
> completes, not when all the tasks complete.
> 
> I see too many comments, for instance:
> // Checking for failures
> if (error == ERROR)
> 
> is useless, it is pretty obvious from reading the code that you are
> checking for failure. Comments should tell us things that are not
> obvious.
> 
> Now, about the style, this is C code, so use C style comments. I would
> also prefer that you use the kernel coding style, but this is not
> kernel code, so I am not sure the rule is to use the kernel coding
> style.

It is. We do want a common style regardless of the execution space. TIA,

-- 
Philippe.




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Xenomai-core] [PATCH] VxWorks semaphore usage demo
  2007-09-03 17:17   ` Philippe Gerum
@ 2007-09-03 17:29     ` Ravid Baruch Naali
  0 siblings, 0 replies; 7+ messages in thread
From: Ravid Baruch Naali @ 2007-09-03 17:29 UTC (permalink / raw)
  To: rpm; +Cc: xenomai

Philippe Gerum wrote:

> On Mon, 2007-09-03 at 17:32 +0200, Gilles Chanteperdrix wrote:
>   
>> On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
>>     
>>> Hello again,
>>>       
>> Hi,
>>
>>     
>>> I'm not sure what is the preferred way to commit my changes, so before I
>>> commit i'm Attaching my patch in order to get you remarks and further
>>> instructions
>>>       
>> The synchronization on tasks completion with the semID semaphore seems
>> broken. The main thread will get the semahore when the first task
>> completes, not when all the tasks complete.
>>
>> I see too many comments, for instance:
>> // Checking for failures
>> if (error == ERROR)
>>
>> is useless, it is pretty obvious from reading the code that you are
>> checking for failure. Comments should tell us things that are not
>> obvious.
>>
>> Now, about the style, this is C code, so use C style comments. I would
>> also prefer that you use the kernel coding style, but this is not
>> kernel code, so I am not sure the rule is to use the kernel coding
>> style.
>>     
>
> It is. We do want a common style regardless of the execution space. TIA,
>
>   
Thanks for the comments I'll adapt and fix it before I'll send it again.


-- 
Ravid Baruch Naali
ravidbn@domain.hid
+972 4 6732729
+972 52 5830021



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Xenomai-core] [PATCH] VxWorks semaphore usage demo
  2007-09-03 15:32 ` Gilles Chanteperdrix
  2007-09-03 17:17   ` Philippe Gerum
@ 2007-09-03 20:57   ` Ravid Baruch Naali
  2007-09-04  8:50     ` Gilles Chanteperdrix
  1 sibling, 1 reply; 7+ messages in thread
From: Ravid Baruch Naali @ 2007-09-03 20:57 UTC (permalink / raw)
  To: Gilles Chanteperdrix, xenomai

[-- Attachment #1: Type: text/plain, Size: 1089 bytes --]

Re sending the patch following Gilles comments


Gilles Chanteperdrix wrote:

> On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
>   
>> Hello again,
>>     
>
> Hi,
>
>   
>> I'm not sure what is the preferred way to commit my changes, so before I
>> commit i'm Attaching my patch in order to get you remarks and further
>> instructions
>>     
>
> The synchronization on tasks completion with the semID semaphore seems
> broken. The main thread will get the semahore when the first task
> completes, not when all the tasks complete.
>
> I see too many comments, for instance:
> // Checking for failures
> if (error == ERROR)
>
> is useless, it is pretty obvious from reading the code that you are
> checking for failure. Comments should tell us things that are not
> obvious.
>
> Now, about the style, this is C code, so use C style comments. I would
> also prefer that you use the kernel coding style, but this is not
> kernel code, so I am not sure the rule is to use the kernel coding
> style.
>   


-- 
Ravid Baruch Naali
ravidbn@domain.hid
+972 4 6732729
+972 52 5830021


[-- Attachment #2: vxworks_demo.2960.patch --]
[-- Type: text/x-patch, Size: 4488 bytes --]

Index: ksrc/skins/vxworks/demos/sem.c
===================================================================
--- ksrc/skins/vxworks/demos/sem.c	(revision 0)
+++ ksrc/skins/vxworks/demos/sem.c	(revision 0)
@@ -0,0 +1,138 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <vxworks/vxworks.h>
+#include <sys/mman.h>
+
+
+#define TASK_NUM 10
+#define STACK_SIZE 1024
+#define LOOPS 10
+#define xnarch_printf printf
+#define TOP_PRIORITY 25
+
+SEM_ID task_counter_sem;
+SEM_ID task_sync_sem;
+
+static errno_to_messgae(char *failing_func);
+
+/*
+ * A shared main routine for all tasks other then the main
+ * each task waits for the signal from the main task
+ * then it notify it's existing 
+ *
+ * It then loops and prints out LOOPS times it's name and tid
+ * when done it notifies
+ * 
+ * None of the parameters are being used
+ */
+void task_main_routine(long arg1, long arg2, long arg3, long arg4, long arg5, long arg6,
+	long arg7, long arg8, long arg9, long arg10)
+{
+	int localerrno;
+	STATUS result;
+	int priority;
+	int i = LOOPS;
+	int ownID = taskIdSelf();
+
+	/*Waiting to start synchronized with all other spawned tasks*/
+	result = semTake(task_sync_sem, WAIT_FOREVER);
+	if (result == ERROR) {
+		errno_to_messgae("semTake counter");	
+		return;
+	}
+	/*Taking the counting semaphore to indicate task started running stall
+	 * main from exiting */
+	result = semTake(task_counter_sem, WAIT_FOREVER);
+	if (result == ERROR) {
+		errno_to_messgae("semTake counter");	
+		return;
+	}
+	result = taskPriorityGet(ownID, &priority);
+	
+	xnprintf( "Task priority is %d\n", priority);
+	while (i) {
+		xnprintf("Task name is %s tid=%d\n", taskName(ownID), ownID);
+		sleep(1);
+		i--;
+	}
+	/*Signaling this task is done*/
+	semGive(task_counter_sem);
+}
+
+/*
+ * Main task:
+ * spawns TASK_NUM tasks synchronize their operation 
+ * exit and clean up when all tasks are done
+ */
+int main(int argc, char **argv)
+{
+	/*array holding all tasks ids*/
+	int tids[TASK_NUM];
+	int i;
+	mlockall(MCL_CURRENT|MCL_FUTURE);
+	/* counting semaphore inital value set to the number of tasks*/
+	task_counter_sem = semCCreate(SEM_Q_PRIORITY, TASK_NUM);
+	if (!task_counter_sem) {
+		xnprintf( "Failed to create semaphore\n");
+		exit(1);
+	}
+	/* semaphore to synchronize all task operation */
+	task_sync_sem = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY);
+	if (!task_sync_sem) {
+		xnprintf( "Failed to create binary semaphore\n");
+		exit(1);
+	}
+	for (i = 0; i < TASK_NUM; i++) {
+		tids[i] = taskSpawn(NULL, (TOP_PRIORITY - i), 0, STACK_SIZE , 
+				task_main_routine,0,0,0,0,0,0,0,0,0,0);
+		xnprintf( "Spawned task: %d\n", tids[i]);
+	}
+	/* Signaling all tasks to run */
+	semFlush(task_sync_sem);
+	/* Waiting for all task to complete their main routine */
+	for (i = 0; i < TASK_NUM; i++)
+		semTake(task_counter_sem, WAIT_FOREVER);
+	/* Cleanup */
+	for (i = 0; i < TASK_NUM; i++)
+		taskDelete(tids[i]);
+	semDelete(task_counter_sem);
+	semDelete(task_sync_sem);
+}
+
+
+/*
+ * Prints out the meaning of an error with relation to the failing function
+ *
+ * parameter:
+ * a prefix string to the failure reason 
+ */
+static errno_to_messgae(char *failing_func)
+{
+	int localerrno = errnoGet();
+	xnprintf("%s: ", failing_func);
+	switch(localerrno){
+	case S_objLib_OBJ_ID_ERROR:
+		xnprintf( "Semaphore ID is invalid\n");
+		break;
+	case S_objLib_OBJ_UNAVAILABLE:
+		xnprintf( "Semaphore unavailable (NO_WAIT)\n");
+		break;
+	case S_objLib_OBJ_TIMEOUT:
+		xnprintf( "Timeout occured before semaphore was"
+				" released\n");
+		break;
+	case S_semLib_INVALID_OPTION:
+		xnprintf( "Semaphore type is invalid\n");
+		break;
+	case EINTR:
+		xnprintf( "Received interup\n");
+		break;
+	default:
+		break;
+	}
+}
Index: ksrc/skins/vxworks/demos/Makefile
===================================================================
--- ksrc/skins/vxworks/demos/Makefile	(revision 2960)
+++ ksrc/skins/vxworks/demos/Makefile	(working copy)
@@ -7,7 +7,7 @@
 
 STD_CFLAGS  := $(shell $(XENO_CONFIG) --xeno-cflags)
 STD_LDFLAGS := $(shell $(XENO_CONFIG) --xeno-ldflags) -lvxworks
-STD_TARGETS := satch
+STD_TARGETS := satch sem
 
 GCIC := $(prefix)/bin/gcic
 SIM_CFLAGS  := -g
@@ -27,6 +27,9 @@
 satch: satch.c
 	$(CC) -o $@ $< $(STD_CFLAGS) $(STD_LDFLAGS)
 
+sem: sem.c
+	$(CC) -o $@ $< $(STD_CFLAGS) $(STD_LDFLAGS)
+
 satch_sim: satch_sim.o
 	$(GCIC) -o $@ $< $(SIM_LDFLAGS)
 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Xenomai-core] [PATCH] VxWorks semaphore usage demo
  2007-09-03 20:57   ` Ravid Baruch Naali
@ 2007-09-04  8:50     ` Gilles Chanteperdrix
  2007-09-04 14:12       ` Philippe Gerum
  0 siblings, 1 reply; 7+ messages in thread
From: Gilles Chanteperdrix @ 2007-09-04  8:50 UTC (permalink / raw)
  To: Ravid Baruch Naali; +Cc: xenomai

On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
> Gilles Chanteperdrix wrote:
>
> > On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
> >
> >> Hello again,
> >>
> >
> > Hi,
> >
> >
> >> I'm not sure what is the preferred way to commit my changes, so before I
> >> commit i'm Attaching my patch in order to get you remarks and further
> >> instructions
> >>
> >
> > The synchronization on tasks completion with the semID semaphore seems
> > broken. The main thread will get the semahore when the first task
> > completes, not when all the tasks complete.
> >
> > I see too many comments, for instance:
> > // Checking for failures
> > if (error == ERROR)
> >
> > is useless, it is pretty obvious from reading the code that you are
> > checking for failure. Comments should tell us things that are not
> > obvious.
> >
> > Now, about the style, this is C code, so use C style comments. I would
> > also prefer that you use the kernel coding style, but this is not
> > kernel code, so I am not sure the rule is to use the kernel coding
> > style.
> >
> Re sending the patch following Gilles comments

Looks good to me, except for the typo in the errno_to_message
function. Philippe, could you apply this patch ? I am changing ISP, so
I have not internet at home.

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Xenomai-core] [PATCH] VxWorks semaphore usage demo
  2007-09-04  8:50     ` Gilles Chanteperdrix
@ 2007-09-04 14:12       ` Philippe Gerum
  0 siblings, 0 replies; 7+ messages in thread
From: Philippe Gerum @ 2007-09-04 14:12 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: Ravid Baruch Naali, xenomai

On Tue, 2007-09-04 at 10:50 +0200, Gilles Chanteperdrix wrote:
> On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
> > Gilles Chanteperdrix wrote:
> >
> > > On 9/3/07, Ravid Baruch Naali <ravidbn@domain.hid> wrote:
> > >
> > >> Hello again,
> > >>
> > >
> > > Hi,
> > >
> > >
> > >> I'm not sure what is the preferred way to commit my changes, so before I
> > >> commit i'm Attaching my patch in order to get you remarks and further
> > >> instructions
> > >>
> > >
> > > The synchronization on tasks completion with the semID semaphore seems
> > > broken. The main thread will get the semahore when the first task
> > > completes, not when all the tasks complete.
> > >
> > > I see too many comments, for instance:
> > > // Checking for failures
> > > if (error == ERROR)
> > >
> > > is useless, it is pretty obvious from reading the code that you are
> > > checking for failure. Comments should tell us things that are not
> > > obvious.
> > >
> > > Now, about the style, this is C code, so use C style comments. I would
> > > also prefer that you use the kernel coding style, but this is not
> > > kernel code, so I am not sure the rule is to use the kernel coding
> > > style.
> > >
> > Re sending the patch following Gilles comments
> 
> Looks good to me, except for the typo in the errno_to_message
> function. Philippe, could you apply this patch ? I am changing ISP, so
> I have not internet at home.
> 

Ok, will merge.

-- 
Philippe.




^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2007-09-04 14:12 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-03 15:13 [Xenomai-core] [PATCH] VxWorks semaphore usage demo Ravid Baruch Naali
2007-09-03 15:32 ` Gilles Chanteperdrix
2007-09-03 17:17   ` Philippe Gerum
2007-09-03 17:29     ` Ravid Baruch Naali
2007-09-03 20:57   ` Ravid Baruch Naali
2007-09-04  8:50     ` Gilles Chanteperdrix
2007-09-04 14:12       ` Philippe Gerum

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.