summaryrefslogtreecommitdiff
path: root/apps/builtin
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-17 14:43:55 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-17 14:43:55 +0000
commitd8d9cc8a96cdc2219af7bec8142e7633779fd685 (patch)
treed9cf39f88361f174a2350d354ffb5584d43e2fc4 /apps/builtin
parent4f0e8b1249c1550bac83f9db61c67094bc6afc2d (diff)
downloadnuttx-d8d9cc8a96cdc2219af7bec8142e7633779fd685.tar.gz
nuttx-d8d9cc8a96cdc2219af7bec8142e7633779fd685.tar.bz2
nuttx-d8d9cc8a96cdc2219af7bec8142e7633779fd685.zip
Add logic to automatically unload module on exit; Several patches from Mike Smith
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5528 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/builtin')
-rw-r--r--apps/builtin/Makefile2
-rw-r--r--apps/builtin/builtin.c33
-rw-r--r--apps/builtin/exec_builtin.c16
3 files changed, 20 insertions, 31 deletions
diff --git a/apps/builtin/Makefile b/apps/builtin/Makefile
index d77054f41..f89532871 100644
--- a/apps/builtin/Makefile
+++ b/apps/builtin/Makefile
@@ -39,7 +39,7 @@ include $(APPDIR)/Make.defs
# Source and object files
ASRCS =
-CSRCS = builtin.c exec_builtin.c
+CSRCS = builtin.c builtin_list.c exec_builtin.c
AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))
diff --git a/apps/builtin/builtin.c b/apps/builtin/builtin.c
index 7655a531d..d26f0a044 100644
--- a/apps/builtin/builtin.c
+++ b/apps/builtin/builtin.c
@@ -55,27 +55,8 @@
* Public Data
****************************************************************************/
-#undef EXTERN
-#if defined(__cplusplus)
-#define EXTERN extern "C"
-extern "C" {
-#else
-#define EXTERN extern
-#endif
-
-#include "builtin_proto.h"
-
-const struct builtin_s g_builtins[] =
-{
-# include "builtin_list.h"
- { NULL, 0, 0, 0 }
-};
-
-#undef EXTERN
-#if defined(__cplusplus)
-}
-#endif
-
+extern const struct builtin_s g_builtins[];
+extern const int g_builtin_count;
/****************************************************************************
* Private Data
@@ -89,9 +70,11 @@ const struct builtin_s g_builtins[] =
* Public Functions
****************************************************************************/
-int number_builtins(void)
+FAR const struct builtin_s *builtin_for_index(int index)
{
- return sizeof(g_builtins)/sizeof(struct builtin_s) - 1;
+ if (index < g_builtin_count)
+ {
+ return &g_builtins[index];
+ }
+ return NULL;
}
-
-
diff --git a/apps/builtin/exec_builtin.c b/apps/builtin/exec_builtin.c
index 05648590d..d4431164c 100644
--- a/apps/builtin/exec_builtin.c
+++ b/apps/builtin/exec_builtin.c
@@ -142,8 +142,17 @@ static void bultin_semtake(FAR sem_t *sem)
static int builtin_taskcreate(int index, FAR const char **argv)
{
+ FAR const struct builtin_s *b;
int ret;
+ b = builtin_for_index(index);
+
+ if (b == NULL)
+ {
+ errno = ENOENT;
+ return ERROR;
+ }
+
/* Disable pre-emption. This means that although we start the builtin
* application here, it will not actually run until pre-emption is
* re-enabled below.
@@ -153,8 +162,7 @@ static int builtin_taskcreate(int index, FAR const char **argv)
/* Start the builtin application task */
- ret = TASK_CREATE(g_builtins[index].name, g_builtins[index].priority,
- g_builtins[index].stacksize, g_builtins[index].main,
+ ret = TASK_CREATE(b->name, b->priority, b->stacksize, b->main,
(argv) ? &argv[1] : (FAR const char **)NULL);
/* If robin robin scheduling is enabled, then set the scheduling policy
@@ -171,7 +179,7 @@ static int builtin_taskcreate(int index, FAR const char **argv)
* new task cannot yet have changed from its initial value.
*/
- param.sched_priority = g_builtins[index].priority;
+ param.sched_priority = b->priority;
(void)sched_setscheduler(ret, SCHED_RR, &param);
}
#endif
@@ -293,8 +301,6 @@ static inline int builtin_startproxy(int index, FAR const char **argv,
int errcode;
int ret;
- DEBUGASSERT(path);
-
svdbg("index=%d argv=%p redirfile=%s oflags=%04x\n",
index, argv, redirfile, oflags);