Aligning Variables to a Word or Long

There may be times where you need to align a variable to a word or long boundary. This can be useful in communication packet applications. This can be done with 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