Цитата(dimka76 @ Jun 6 2008, 12:24)

Си файл
А текст самой foo - тайна? :-) используйте команду LDR R1, =Table1. Ассемблер сам положит константу с адресом Table1 где-то рядом с этой командой, а саму команду заменит на соответствующий LDR R1, [PC, #N]
Цитата(dimka76 @ Jun 6 2008, 12:24)

во FLASH образ функции foo() имеется (смотрю map файл и дизассемблер), но он не переписывается при старте во ОЗУ.
А не подключаете ли вы к программе свой cstartup.s79? Если да, то смотрите - есть ли там копирование. Библиотечный стартап копирование выполняет. A!! Есть у них такая штука, как массив в сегменте INITTAB. Его формат следующий:
Код
/* Structure of an element in the segment initialization table
* in segment INITTAB. Used for both zero-initialization and copying. */
typedef struct
{
long Size; /* Number of bytes to initialize */
char* Dst; /* Destination. If Dst==Src, then init to 0 */
char* Src; /* Source address. Usually in ROM. */
} InitBlock_Type;
А дальше библиотечная функция __segment_init(), проходя по этому массиву, делает копирование:
Код
pragma location="ICODE"
__interwork void __segment_init(void)
{
InitBlock_Type const * const initTableBegin = __sfb( "INITTAB" );
InitBlock_Type const * const initTableEnd = __sfe( "INITTAB" );
InitBlock_Type const * initTableP;
/* Loop over all elements in the initialization table. */
for (initTableP=initTableBegin; initTableP<initTableEnd; initTableP++)
{
/* If src=dest then we should clear a memory
* block, otherwise it's a copy operation. */
if (initTableP->Src == initTableP->Dst)
{
memset(initTableP->Dst, 0, initTableP->Size);
}
else
{
memcpy(initTableP->Dst, initTableP->Src, initTableP->Size);
}
}
}
Значит, в вашем ассемблерном файле, вам надо сделать
Код
RSEG INITTAB:CODE
dw .....
dw .....
dw .....
Вот только сразу не соображу - как взять адрес, откуда копировать. Компилятор как-то подставляет, а как тут сделать - ума не приложу.
Вот есть кое-что на сайте самого ИАРа. А
вот это как раз подходит под ваш случай. Придется заводить свои сегменты

В gcc это сделано более оптимально, без массива.