Цитата
Указание в скрипте линкера входных секций как *(.text.*) не помогло?
Еще как помогло!
Правда файл crt.s перестал линковаться (вместо ассемблерных команд непонятные значения, занимающие тот же объем в итоговом файле). Но после вставки скрипта из примеров для WinARM и небольших в нем исправлений, все заработало.
В main.dmp вижу:
Код
0010047c <EnableFIQ>:
10047c: e10f0000 mrs r0, CPSR
100480: e3c03040 bic r3, r0, #64; 0x40
100484: e129f003 msr CPSR_fc, r3
100488: e12fff1e bx lr
Disassembly of section .text.EnableIRQ:
0010048c <EnableIRQ>:
10048c: e10f0000 mrs r0, CPSR
100490: e3c03080 bic r3, r0, #128; 0x80
100494: e129f003 msr CPSR_fc, r3
100498: e12fff1e bx lr
Disassembly of section .text.RestoreIRQ:
0010049c <RestoreIRQ>:
10049c: e10f2000 mrs r2, CPSR
1004a0: e2000080 and r0, r0, #128; 0x80
1004a4: e3c23080 bic r3, r2, #128; 0x80
1004a8: e1833000 orr r3, r3, r0
1004ac: e129f003 msr CPSR_fc, r3
1004b0: e1a00002 mov r0, r2
1004b4: e12fff1e bx lr
таким образом каждая функция расположена в своей секции, уровни оптимизации пробовал разные, в данном случае -Оs. Все функции на месте, хотя я вызываю только EnableIRQ() один раз в main.c.
Пробовал комментировать вызовы функций, находящихся в USART_setup.c в частности USART0_setup();
Картина та же - исчезает только команда вызова.
Может еще каких-нибудь флажков в мэйкфайле не хватает?
Цитата
Поэтому, даже если будете пользоваться библиотеками, вам придется каждую функцию компилировать в библиотеку из отдельного исходного файла - иначе получите то же самое, что и сейчас.
Вы, Сергей, абсолютно правы - уже убедился, так и есть: при вызове одной подключаются все. Слишком накладно получается каждую функцию из отдельного файла.