Aligning Variables to a Word or Long

Last modified by Microchip on 2024/01/19 14:48

There may be times when you need to align a variable to a word or a long boundary. This can be useful in communication packet applications. This can be done with Random Access Memory (RAM) variable alignment and can be structured in the C code for 16-bit and 32-bit. MPLAB® XC8 for 8-bit PIC® MCU processors doesn't offer this option.

/*******************************************************************************
 *      Align a RAM variable
 *
 ******************************************************************************/


#if defined(__XC8__)
// XC8 does not support RAM variable alignment

#elif defined(__XC16__)
   #ifdef __CCI__
       __align(32) unsigned long alignedVariable;  // align start
       #if 0
            __align(-32) unsigned long endAlignedVariable;
        #endif
   #else
       unsigned long alignedVariable __attribute__((aligned(32)));  // align start
       unsigned long endAlignedVariable __attribute__((reverse(32)));  // align end
   #endif

#elif defined(__XC32__)
   #ifdef __CCI__
       __align(32) unsigned long alignedVariable;  // align start
   #else
       unsigned long alignedVariable __attribute__((aligned(32)));
   #endif

#endif