Implemented on-demand PLL clock generation for the U4, U6 and U7 series USB AVRs...
[pub/USBasp.git] / LUFA / Common / Attributes.h
index 67a3166..53cfb6d 100644 (file)
 */
 
 /** \file
- *  \brief AVR-GCC special function/variable attribute macros.
+ *  \brief GCC special function/variable attribute macros.
  *
- *  This file contains macros for applying GCC specific attributes to functions and variables to control various
- *  optimiser and code generation features of the compiler. Attributes may be placed in the function prototype
- *  or variable declaration in any order, and multiple attributes can be specified for a single item via a space
- *  separated list.
- *
- *  On incompatible versions of GCC or on other compilers, these macros evaluate to nothing unless they are
- *  critical to the code's function and thus must throw a compiler error when used.
+ *  \copydetails Group_GCCAttributes
  *
  *  \note Do not include this file directly, rather include the Common.h header file instead to gain this file's
  *        functionality.
  */
 
 /** \ingroup Group_Common
- *  @defgroup Group_GCCAttr Function/Variable Attributes
+ *  \defgroup Group_GCCAttributes Function/Variable Attributes
+ *  \brief GCC special function/variable attribute macros.
  *
- *  Macros for easy access GCC function and variable attributes, which can be applied to function prototypes or
- *  variable attributes.
+ *  This module contains macros for applying GCC specific attributes to functions and variables to control various
+ *  optimiser and code generation features of the compiler. Attributes may be placed in the function prototype
+ *  or variable declaration in any order, and multiple attributes can be specified for a single item via a space
+ *  separated list.
+ *
+ *  On incompatible versions of GCC or on other compilers, these macros evaluate to nothing unless they are
+ *  critical to the code's function and thus must throw a compile error when used.
  *
  *  @{
  */
 
-#ifndef __FUNCATTR_H__
-#define __FUNCATTR_H__
+#ifndef __LUFA_FUNCATTR_H__
+#define __LUFA_FUNCATTR_H__
 
        /* Preprocessor Checks: */
-               #if !defined(__COMMON_H__)
+               #if !defined(__INCLUDE_FROM_COMMON_H)
                        #error Do not include this file directly. Include LUFA/Common/Common.h instead to gain this functionality.
                #endif
 
                         *  \param[in] Func  Name of the function which the given function name should alias.
                         */
                        #define ATTR_ALIAS(Func)               __attribute__ ((alias( #Func )))
+                       
+                       /** Marks a variable or struct element for packing into the smallest space available, omitting any
+                        *  alignment bytes usually added between fields to optimize field accesses.
+                        */
+                       #define ATTR_PACKED                     __attribute__ ((packed))
+
+                       /** Indicates the minimum alignment in bytes for a variable or struct element.
+                        * 
+                        *  \param[in] Bytes  Minimum number of bytes the item should be aligned to.
+                        */
+                       #define ATTR_ALIGNED(Bytes)            __attribute__ ((aligned(Bytes)))
 #endif
 
 /** @} */