projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sam3 pmc: add functions to handle peripheral clock enable/disable;
[bertos.git]
/
bertos
/
cfg
/
compiler.h
diff --git
a/bertos/cfg/compiler.h
b/bertos/cfg/compiler.h
index 8c217c009641115685977aac40ab046aacaaf19c..ac60848f5da9eec2b3877e62d8ace28e1ac3847e 100644
(file)
--- a/
bertos/cfg/compiler.h
+++ b/
bertos/cfg/compiler.h
@@
-209,6
+209,7
@@
#define RESTRICT __restrict__
#define MUST_CHECK __attribute__((warn_unused_result))
#define PACKED __attribute__((packed))
#define RESTRICT __restrict__
#define MUST_CHECK __attribute__((warn_unused_result))
#define PACKED __attribute__((packed))
+ #define ALIGNED(x) __attribute__ ((__aligned__(x)))
#if CPU_ARM | CPU_CM3
#define NAKED __attribute__((naked))
#else
#if CPU_ARM | CPU_CM3
#define NAKED __attribute__((naked))
#else
@@
-360,6
+361,9
@@
#ifndef PACKED
#define PACKED /* nothing */
#endif
#ifndef PACKED
#define PACKED /* nothing */
#endif
+#ifndef ALIGNED
+#define ALIGNED /* nothing */
+#endif
#ifndef MEMORY_BARRIER
#define MEMORY_BARRIER /* nothing */
#warning No memory barrier defined for select compiler. If you use the kernel check it.
#ifndef MEMORY_BARRIER
#define MEMORY_BARRIER /* nothing */
#warning No memory barrier defined for select compiler. If you use the kernel check it.
@@
-455,6
+459,14
@@
typedef const void * const_iptr_t;
typedef unsigned char sigbit_t; /**< Type for signal bits. */
typedef unsigned char sigmask_t; /**< Type for signal masks. */
typedef unsigned char sigbit_t; /**< Type for signal bits. */
typedef unsigned char sigmask_t; /**< Type for signal masks. */
+/**
+ * Signal structure
+ */
+typedef struct Signal
+{
+ sigmask_t wait; /**< Signals the process is waiting for */
+ sigmask_t recv; /**< Received signals */
+} Signal;
/**
* \name Standard type definitions.
/**
* \name Standard type definitions.
@@
-540,10
+552,10
@@
typedef unsigned char sigmask_t; /**< Type for signal masks. */
* NOTE: the construct __builtin_types_compatible_p() is only
* available for C.
*/
* NOTE: the construct __builtin_types_compatible_p() is only
* available for C.
*/
- #define countof(a) (sizeof(a) / sizeof(*(a)) + \
-
sizeof(typeof(int[1 - 2 *
\
-
!!__builtin_types_compatible_p(typeof(a),
\
- typeof(
&a[0]))])) * 0
)
+ #define countof(a) (sizeof(a) / sizeof(*(a)) +
\
+
STATIC_ASSERT_EXPR(
\
+
!__builtin_types_compatible_p(
\
+ typeof(
a), typeof(&a[0])))
)
#else
#define countof(a) (sizeof(a) / sizeof(*(a)))
#endif
#else
#define countof(a) (sizeof(a) / sizeof(*(a)))
#endif
@@
-599,4
+611,11
@@
typedef unsigned char sigmask_t; /**< Type for signal masks. */
do { (void)(&(var) == (type *)0); } while(0)
#endif
do { (void)(&(var) == (type *)0); } while(0)
#endif
+/**
+ * Prevent the compiler from optimizing access to the variable \a x, enforcing
+ * a refetch from memory. This also forbid from reordering successing instances
+ * of ACCESS_SAFE().
+ */
+#define ACCESS_SAFE(x) (*(volatile typeof(x) *)&(x))
+
#endif /* BERTOS_COMPILER_H */
#endif /* BERTOS_COMPILER_H */