diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-01-05 11:47:59 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-01-05 11:47:59 +0000 |
commit | a2ebdce0c7f7c2b6fe6089080caaf0cc17d5db89 (patch) | |
tree | 5d19dd2fb15de7d2cab49217a8b969886f54a289 | |
parent | bb5acac94d079e107f8faa4bb6b2e5d1389c40d4 (diff) | |
download | ChibiOS-a2ebdce0c7f7c2b6fe6089080caaf0cc17d5db89.tar.gz ChibiOS-a2ebdce0c7f7c2b6fe6089080caaf0cc17d5db89.tar.bz2 ChibiOS-a2ebdce0c7f7c2b6fe6089080caaf0cc17d5db89.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@580 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r-- | src/chsys.c (renamed from src/chinit.c) | 0 | ||||
-rw-r--r-- | src/include/ch.h | 10 | ||||
-rw-r--r-- | src/include/sys.h | 81 | ||||
-rw-r--r-- | src/kernel.mk | 2 |
4 files changed, 83 insertions, 10 deletions
diff --git a/src/chinit.c b/src/chsys.c index 613e7bfeb..613e7bfeb 100644 --- a/src/chinit.c +++ b/src/chsys.c diff --git a/src/include/ch.h b/src/include/ch.h index 0c3eb2a64..82348a044 100644 --- a/src/include/ch.h +++ b/src/include/ch.h @@ -54,6 +54,7 @@ #include <chtypes.h>
#include "lists.h"
#include <chcore.h>
+#include "sys.h"
#include "vt.h"
#include "scheduler.h"
#include "semaphores.h"
@@ -79,15 +80,6 @@ #define TRUE (!FALSE)
#endif
-#ifdef __cplusplus
-extern "C" {
-#endif
- void chSysInit(void);
- void chSysTimerHandlerI(void);
-#ifdef __cplusplus
-}
-#endif
-
#endif /* _CH_H_ */
/** @} */
diff --git a/src/include/sys.h b/src/include/sys.h new file mode 100644 index 000000000..8765c8d49 --- /dev/null +++ b/src/include/sys.h @@ -0,0 +1,81 @@ +/*
+ ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @addtogroup Core
+ * @{
+ */
+
+#ifndef _SYS_H_
+#define _SYS_H_
+
+#if defined(CH_USE_REENTRANT_LOCKS) || defined(_DOXYGEN_)
+/**
+ * Enters the ChibiOS/RT system mutual exclusion zone.
+ * @note The use of system mutual exclusion zone is not recommended in
+ * the user code, it is a better idea to use the semaphores or mutexes
+ * instead.
+ * @note The code of this API is always inlined regardless the
+ * @p CH_OPTIMIZE_SPEED setting. This function is meant to be used in
+ * places where the performance is always preferred.
+ * @see CH_USE_NESTED_LOCKS
+ */
+#define chSysLockInline() { \
+ if (currp->p_locks == 0) { \
+ currp->p_locks++; \
+ sys_disable(); \
+ } \
+}
+
+/**
+ * Leaves the ChibiOS/RT system mutual exclusion zone.
+ * @note The use of system mutual exclusion zone is not recommended in
+ * the user code, it is a better idea to use the semaphores or mutexes
+ * instead.
+ * @note The code of this API is always inlined regardless the
+ * @p CH_OPTIMIZE_SPEED setting. This function is meant to be used in
+ * places where the performance is always preferred.
+ * @see CH_USE_NESTED_LOCKS
+ */
+#define chSysUnlockInline() { \
+ if (--currp->p_locks == 0) \
+ sys_enable(); \
+}
+#else /* defined(CH_USE_REENTRANT_LOCKS) || defined(_DOXYGEN_) */
+#define chSysLockInline() sys_disable()
+#define chSysUnlockInline() sys_enable()
+#endif /* !defined(CH_USE_REENTRANT_LOCKS) && !defined(_DOXYGEN_) */
+
+#if defined(CH_OPTIMIZE_SPEED)
+#define chSysLock() chSysLockInline()
+#define chSysUnlock chSysUnlockInline()
+#endif /* defined(CH_OPTIMIZE_SPEED) */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void chSysInit(void);
+ void chSysTimerHandlerI(void);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_H_ */
+
+/** @} */
diff --git a/src/kernel.mk b/src/kernel.mk index 75ab83d93..2a178897b 100644 --- a/src/kernel.mk +++ b/src/kernel.mk @@ -1,6 +1,6 @@ # List of all the ChibiOS/RT kernel files, there is no need to remove the files
# from this list, you can disable parts of the kernel by editing chconf.h.
-KERNSRC = ../../src/chinit.c ../../src/chdebug.c \
+KERNSRC = ../../src/chsys.c ../../src/chdebug.c \
../../src/chlists.c ../../src/chvt.c \
../../src/chschd.c ../../src/chthreads.c \
../../src/chsem.c ../../src/chmtx.c \
|