From a2ebdce0c7f7c2b6fe6089080caaf0cc17d5db89 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 5 Jan 2009 11:47:59 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@580 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- src/include/ch.h | 10 +------ src/include/sys.h | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 src/include/sys.h (limited to 'src/include') 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 #include "lists.h" #include +#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 . +*/ + +/** + * @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_ */ + +/** @} */ -- cgit v1.2.3