With the Keil Linker Directive SECTIONS( VAR%FDATA (addr1) [addr2] ) you may specify a execution address (addr1) and a storage address (addr2) for a section. This may be used to create FLASH programming routines that execute from RAM but are stored in FLASH. There is the Tasking Linker Directive ADDRESSES( SECTIONS( VAR_FB(adresse) )) But here, I think, you can not differ between a execution and a storege address. Who can help me???
I didn't even know that was a feature. Seems convenient. The idea is to locate the code at its proper execution address. This is a job for the linker. If you then want to store the code at some other address, that's a job for the tool that creates your binary file -- in Keil's case, also the linker. But you could do post-link surgery on the binary/hex/whatever with a tool like SRecord. I assume you've also got the code that will move this special region from flash to its intended execution address in RAM? Why are you switching compilers?