[rtems commit] score: C/C++ compatibility macros for ISR locks

Sebastian Huber sebh at rtems.org
Thu Mar 5 10:35:54 UTC 2015


Module:    rtems
Branch:    master
Commit:    b8aa1c10b0886c981c7018c72e2a84cb4fb0535f
Changeset: http://git.rtems.org/rtems/commit/?id=b8aa1c10b0886c981c7018c72e2a84cb4fb0535f

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Mar  5 09:53:09 2015 +0100

score: C/C++ compatibility macros for ISR locks

Update #2273.

---

 cpukit/rtems/include/rtems/rtems/intr.h    | 45 ++++++++++++++++++++++++
 cpukit/score/include/rtems/score/isrlock.h | 55 +++++++++++++++++++++++++++---
 2 files changed, 96 insertions(+), 4 deletions(-)

diff --git a/cpukit/rtems/include/rtems/rtems/intr.h b/cpukit/rtems/include/rtems/rtems/intr.h
index 57e8a96..259120f 100644
--- a/cpukit/rtems/include/rtems/rtems/intr.h
+++ b/cpukit/rtems/include/rtems/rtems/intr.h
@@ -165,6 +165,51 @@ typedef ISR_lock_Control rtems_interrupt_lock;
 typedef ISR_lock_Context rtems_interrupt_lock_context;
 
 /**
+ * @brief Defines an interrupt lock member.
+ *
+ * Do not add a ';' after this macro.
+ *
+ * @param _designator The designator for the interrupt lock.
+ */
+#define RTEMS_INTERRUPT_LOCK_MEMBER( _designator ) \
+  ISR_LOCK_MEMBER( _designator )
+
+/**
+ * @brief Declares an interrupt lock variable.
+ *
+ * Do not add a ';' after this macro.
+ *
+ * @param _qualifier The qualifier for the interrupt lock, e.g. extern.
+ * @param _designator The designator for the interrupt lock.
+ */
+#define RTEMS_INTERRUPT_LOCK_DECLARE( _qualifier, _designator ) \
+  ISR_LOCK_DECLARE( _qualifier, _designator )
+
+/**
+ * @brief Defines an interrupt lock variable.
+ *
+ * Do not add a ';' after this macro.
+ *
+ * @param _qualifier The qualifier for the interrupt lock, e.g. static.
+ * @param _designator The designator for the interrupt lock.
+ * @param _name The name for the interrupt lock.  It must be a string.  The
+ * name is only used if profiling is enabled.
+ */
+#define RTEMS_INTERRUPT_LOCK_DEFINE( _qualifier, _designator, _name ) \
+  ISR_LOCK_DEFINE( _qualifier, _designator, _name )
+
+/**
+ * @brief Defines an interrupt lock variable reference.
+ *
+ * Do not add a ';' after this macro.
+ *
+ * @param _designator The designator for the interrupt lock reference.
+ * @param _target The target for the interrupt lock reference.
+ */
+#define RTEMS_INTERRUPT_LOCK_REFERENCE( _designator, _target ) \
+  ISR_LOCK_REFERENCE( _designator, _target )
+
+/**
  * @brief Initializer for static initialization of interrupt locks.
  *
  * @param _name The name for the interrupt lock.  It must be a string.  The
diff --git a/cpukit/score/include/rtems/score/isrlock.h b/cpukit/score/include/rtems/score/isrlock.h
index 51d8fca..d716b38 100644
--- a/cpukit/score/include/rtems/score/isrlock.h
+++ b/cpukit/score/include/rtems/score/isrlock.h
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (c) 2013 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2013-2015 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
  *  Dornierstr. 4
@@ -71,16 +71,63 @@ typedef struct {
 } ISR_lock_Context;
 
 /**
- * @brief Defines an ISR lock.
+ * @brief Defines an ISR lock member.
  *
  * Do not add a ';' after this macro.
  *
  * @param _designator The designator for the interrupt lock.
  */
 #if defined( RTEMS_SMP )
-  #define ISR_LOCK_DEFINE( _designator ) ISR_lock_Control _designator;
+  #define ISR_LOCK_MEMBER( _designator ) ISR_lock_Control _designator;
 #else
-  #define ISR_LOCK_DEFINE( _designator )
+  #define ISR_LOCK_MEMBER( _designator )
+#endif
+
+/**
+ * @brief Declares an ISR lock variable.
+ *
+ * Do not add a ';' after this macro.
+ *
+ * @param _qualifier The qualifier for the interrupt lock, e.g. extern.
+ * @param _designator The designator for the interrupt lock.
+ */
+#if defined( RTEMS_SMP )
+  #define ISR_LOCK_DECLARE( _qualifier, _designator ) \
+    _qualifier ISR_lock_Control _designator;
+#else
+  #define ISR_LOCK_DECLARE( _qualifier, _designator )
+#endif
+
+/**
+ * @brief Defines an ISR lock variable.
+ *
+ * Do not add a ';' after this macro.
+ *
+ * @param _qualifier The qualifier for the interrupt lock, e.g. static.
+ * @param _designator The designator for the interrupt lock.
+ * @param _name The name for the interrupt lock.  It must be a string.  The
+ * name is only used if profiling is enabled.
+ */
+#if defined( RTEMS_SMP )
+  #define ISR_LOCK_DEFINE( _qualifier, _designator, _name ) \
+    _qualifier ISR_lock_Control _designator = { SMP_LOCK_INITIALIZER( _name ) };
+#else
+  #define ISR_LOCK_DEFINE( _qualifier, _designator, _name )
+#endif
+
+/**
+ * @brief Defines an ISR lock variable reference.
+ *
+ * Do not add a ';' after this macro.
+ *
+ * @param _designator The designator for the interrupt lock reference.
+ * @param _target The target for the interrupt lock reference.
+ */
+#if defined( RTEMS_SMP )
+  #define ISR_LOCK_REFERENCE( _designator, _target ) \
+    ISR_lock_Control *_designator = _target;
+#else
+  #define ISR_LOCK_REFERENCE( _designator, _target )
 #endif
 
 /**




More information about the vc mailing list