С Кортексами пока не работаю, пробовал на ARM7 и AVR MEMORY
{
REMAP (rx) : ORIGIN = 0x00000000, LENGTH = 0x00004000 /* the same size ar RAM */
ROM (rx) : ORIGIN = 0x00100000, LENGTH = 0x00008000 /* any SAM7 has at least 32K ROM */
RAM (rw) : ORIGIN = 0x00200000, LENGTH = 0x00004000 /* any SAM7 has at least 4K RAM */
}
Ext_func = 0x1234;
SECTIONS
{
OS::TEventFlag ef; //
OS::TEventFlag Timer_Ovf;
//---------------------------------------------------------------------------
extern "C" void Ext_func();
int main()
{
Ext_func();
OS::Run();
}
Ну и arm-none-eabi-objdump -hSC Example.elf > Example.lss
00100294 <main>:
OS::TEventFlag ef; //
OS::TEventFlag Timer_Ovf;
//---------------------------------------------------------------------------
extern "C" void Ext_func();
int main()
{
100294: e92d4008 push {r3, lr}
Ext_func();
100298: ebfc03e5 bl 1234 <Ext_func>
А листинг содержит, естественно, неразрешенную ссылку:
439 main:
440 0000 08402DE9 .LFB98:
441 .loc 1 69 0
442 .cfi_startproc
70:./Src/main.cpp **** Ext_func();
443 @ Function supports interworking.
ARM GAS D:\Temp\ccCUjnP0.s page 30
444 @ args = 0, pretend = 0, frame = 0
445 @ frame_needed = 0, uses_anonymous_args = 0
446 0004 FEFFFFEB stmfd sp!, {r3, lr} @,
447 .LCFI4:
448 .cfi_def_cfa_offset 8
449 .loc 1 70 0
.....
450 .cfi_offset 14, -4
451 0008 08309FE5 .cfi_offset 3, -8
452 000c 043093E5 bl Ext_func @
И, кстати, в листинге коды "съехали" далеко от собственно мнемоник команд - это какая-то бага в генераторе листингов (Yagarto 20100501, arm-none-eabi-gcc (GCC) 4.5.0).
И кстати, а в .ld скрипте ведь нужно ставить ";" после объявления "Serial_no = 0x0010003C" в соответствии с синтаксисом?
Да, конечно.