X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcfg%2Fcompiler.h;h=3a2f34c2c429f159bbc02f2d95c55a24457d6169;hb=0e785d04f7bf33e6d8c69e74a4a71083be1878e7;hp=843af838c502621f473713c8dff6a945357b28e6;hpb=47d46418dff91a1465e95517022abc84607a4da7;p=bertos.git diff --git a/bertos/cfg/compiler.h b/bertos/cfg/compiler.h index 843af838..3a2f34c2 100644 --- 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 ALIGNED(x) __attribute__ ((__aligned__(x))) #if CPU_ARM | CPU_CM3 #define NAKED __attribute__((naked)) #else @@ -360,6 +361,9 @@ #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. @@ -446,6 +450,9 @@ #endif #endif +/** User defined callback type */ +typedef void (*Hook)(void *); + /** Bulk storage large enough for both pointers or integers. */ typedef void * iptr_t; @@ -455,6 +462,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. */ +/** + * Signal structure + */ +typedef struct Signal +{ + sigmask_t wait; /**< Signals the process is waiting for */ + sigmask_t recv; /**< Received signals */ +} Signal; /** * \name Standard type definitions. @@ -599,4 +614,11 @@ typedef unsigned char sigmask_t; /**< Type for signal masks. */ 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 */