Add more missing function attributes to the TWI peripheral driver.
[pub/USBasp.git] / LUFA / Common / Attributes.h
index 67a3166..d6722a2 100644 (file)
 */
 
 /** \file
- *  \brief AVR-GCC special function/variable attribute macros.
+ *  \brief 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_FuncVarAttributes
  *
  *  \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_FuncVarAttributes Function/Variable Attributes
+ *  \brief 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 specific attributes to functions and variables to control various
+ *  optimizer 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
 
                                 */
                                #define ATTR_NAKED                  __attribute__ ((naked))
 
-                               /** Prevents the compiler from considering a specified function for inlining. When applied, the given
-                                *  function will not be inlined under any circumstances.
+                               /** Prevents the compiler from considering a specified function for in-lining. When applied, the given
+                                *  function will not be in-lined under any circumstances.
                                 */
                                #define ATTR_NO_INLINE              __attribute__ ((noinline))
 
                                /** Forces the compiler to inline the specified function. When applied, the given function will be
-                                *  inlined under all circumstances.
+                                *  in-lined under all circumstances.
                                 */
                                #define ATTR_ALWAYS_INLINE          __attribute__ ((always_inline))
 
                         *  \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
 
 /** @} */