Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil, сборка проекта из командной строки
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
koluna
Здравствуйте!

Есть проект в uVision 4.54. В среде все отлично собирается, работает.
Стоит задача собирать этим же компилятором, но из командной строки.
Компиляция происходит нормально.
Затык на линковке.

Линкер выдает следующую ошибку:

Цитата
"test.sct", line 7 (column 9): Error: L6236E: No section matches selector - no section to be FIRST/LAST


Ключи линкера скопировал из настроек среды.
Полностью командная строка вызова линкера выглядит следующим образом (параметры разделил по строкам для удобства восприятия):

Цитата
armlink.exe
<список объектных файлов>
--cpu cortex-m3
--libpath=C:/Keil/ARM/RV31/LIB
--strict
--scatter="test.sct"
--summary_stderr
--info summarysizes
--info sizes
--info totals
--info unused
-o "test.axf"


Помогите, пожалуйста, разобраться. В чем может быть дело?
Может быть библиотеки не те подцепились?
Или еще какие-нибудь опции необходимо указать дополнительно?
С удивлением обнаружил, что для Keil используется не скрипт линкера, а некий scatter-файл.
demiurg_spb
В настройках среды есть галочка, поставив которую после билда проекта появится bat-файл для сборки этого проекта из командной строки.
И никаких лишних телодвижений...
Вот пример такого файла:
CODE
SET PATH=C:\Keil\ARM\BIN40;.......................
SET ARMCC41INC=C:\Keil\ARM\RV31\Inc
SET ARMCC41LIB=C:\Keil\ARM\RV31\Lib
SET CPU_TYPE=STM32F103VB
SET CPU_VENDOR=STMicroelectronics
SET UV2_TARGET=limb - Release
SET CPU_CLOCK=0x00F42400
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\core_cm3.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\stm32f10x_usart.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\stm32f10x_gpio.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\stm32f10x_flash.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\stm32f10x_exti.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\stm32f10x_rcc.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\stm32f10x_tim.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\stm32f10x_dma.__i"
"C:\Keil\ARM\BIN40\ArmAsm" --Via "..\bin\stm32f10x._ia"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\hard_fault.__i"
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\delay.__i"
..........
"C:\Keil\ARM\BIN40\ArmCC" --Via "..\bin\main.__i"
"C:\Keil\ARM\BIN40\ArmLink" --Via "..\bin\limb.lnp"
C:\Keil\ARM\BIN40\fromelf.exe "..\bin\limb.axf" --i32combined --output "..\bin\limb.hex"
richie
Как человек, ленивый по натуре, то не стал bat'ничать каждым файлом для каждого таржета.

Воспользовался командной строкой uv4:

Код
...
set UV2_PATH=C:\...\uv4.exe
set PRJ_PATH=PROJ1.uvproj
...
set  TARGET=TARGET1_NAME
set  OUTDIR=..\PROJ1\OUT\TARGET1
echo Target (%TARGET%)
Date /T
time /T
md   %OUTDIR%
%UV2_PATH% -b  %PRJ_PATH% -t"%TARGET%" -o"%OUTDIR%\%TARGET%.log"
...


Так было для x51. Скорее всего, так же для ARMов.
koluna
Цитата(demiurg_spb @ Aug 29 2013, 11:38) *
В настройках среды есть галочка, поставив которую после билда проекта появится bat-файл для сборки этого проекта из командной строки.
И никаких лишних телодвижений...


Спасибо большое за галочку sm.gif
Options for target ... -> Вкладка "Output" -> Галка "Create batch file".

Дело было в стартапе...
Я сделал make-файл, но не учел, что для него имеет значение регистр имен файлов.
У меня стартап ".s", а в make ожидался как ".S" (при поиске), поэтому не был найден...

Кстати, где в среде отключается отладка (опция "-g")? Не нашел галки...
И еще одно... вроде, опции одинаковые использую (в среде и в make), но объектники получаются немного разными... не знаю почему пока...

demiurg_spb
Смотрите внимательнее, значит что-то всё таки отличается.
koluna
Цитата(demiurg_spb @ Aug 29 2013, 17:33) *
Смотрите внимательнее, значит что-то всё таки отличается.


Поглядел объектники (компиляция в среде, компиляция из make).
У секций ".comment" размер разный и разные имена. Поплыли смещения.
У символов разные имена.

Новый объектник:
Код
...
116 __ARM_grp.AT45.c.2_ci1000_p6dXBc2GlQ5_e00000 00000010  00000000  00000000  00012f64  2**2
                  CONTENTS, READONLY, EXCLUDE, GROUP, LINK_ONCE_DISCARD
...


Старый объектник:
Код
...
116 __ARM_grp.AT45.c.2_Ih1000_8WX5sQ9ETS6_e00000 00000010  00000000  00000000  00012f2c  2**2
                  CONTENTS, READONLY, EXCLUDE, GROUP, LINK_ONCE_DISCARD
...
koluna
По поводу разных объектников. Поковырял объектники. Разобрался.

1. Убрал ради эксперимента "-g" везде.
Разные имена были только у debug секций и символов. Этих секций и символов нет - все одинаково, красиво.

2. Смещения секций поплыли из-за разницы в секциях ".comment". Там прописана строка компиляции.
Просто были немного разные пути sm.gif

В общем, собирается все нормально.
Но вот только почему "-g" дает разные имена - не понятно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.