aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-01-05 11:47:59 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-01-05 11:47:59 +0000
commita2ebdce0c7f7c2b6fe6089080caaf0cc17d5db89 (patch)
tree5d19dd2fb15de7d2cab49217a8b969886f54a289
parentbb5acac94d079e107f8faa4bb6b2e5d1389c40d4 (diff)
downloadChibiOS-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.h10
-rw-r--r--src/include/sys.h81
-rw-r--r--src/kernel.mk2
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 \