@marek_neuzil
Thanks a lot for your answer. This helped a lot.
I also had a "deep dive" into this issue:
As I'm working with the LPC5504, the linker was not able to link the array "CAN0_RAM_BASE_ADDRESS" to the forced alignment (CAN0_BASE_ADDRESS_ALIGN_SIZE).
The suggested workaround is fine for most cases, but it might fail, if "data"-section of RAMX will be filled with other variables (then the linker can not fulfill the alignment requirement for CAN0_RAM_BASE_ADDRESS).
So, a slighly "improved" version would be to link the array to the "data"-section of RAMX (data-section is linked to start of RAMX):
uint32_t CAN0_RAM_BASE_ADDRESS[CAN0_MESSAGE_RAM_SIZE] __attribute__((section(".data.$SRAMX"), aligned(CAN0_BASE_ADDRESS_ALIGN_SIZE)));
or simply:
SDK_ALIGN(uint32_t CAN0_RAM_BASE_ADDRESS[CAN0_MESSAGE_RAM_SIZE], CAN0_BASE_ADDRESS_ALIGN_SIZE) = {1};
-> this 'trick' (set first element of array to 1) will force the linker to link the CAN0_RAM_BASE_ADDRESS into 'data'-section of normal RAM. Works fine, too.