Цитата(aaarrr @ Oct 2 2007, 18:08)

Воспользуйтесь поиском, ключевое слово - scatter.
Обращаться к функции можно будет так же, как и к любой другой - линкер ведь будет знать её расположение.
Может быть речь о разных программах?
В одной программе некая сервисная функция кладется по оговоренному адресу, из другой программы, эта сервисная функция вызывается. Тогда первое ваше предложение верно, а второе насчет линкера не пригодится, т.к. линкер может и не знать где располагается требуемая функция. В обход линкера можно например создать тип сервисной функции и указатель, и написав макрос или проинициализировать такой уазатель вручную, вызывать сервисную функию с любого адреса (в примере вызов функции по адресу 0x1000):
создаем типы:
Код
typedef void __service_func(void);
typedef __service_func *__p_service_func;
используем так:
Код
int main( void )
{
__p_service_func foo = (__p_service_func)0x1000;
...
foo();
или так:
Код
#define CALL_SERVICE( addr ) ( ((__p_service_func)( addr )) () )
int main( void )
{
CALL_SERVICE( 0x1000 );