The RealView ARM C Compiler supports placing a variable at a given memory address using the variable attribute at(address):
at(address)
int var __attribute_
You could use the section attributes and an ld linker script to define the desired address for that section. This is probably messier than your alternatives, but it is an option.