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