Eclipse + GCC + OpenOCD: готовая сборка среды

32-разрядные микроконтроллеры разработки ОАО "НИИЭТ"

Модераторы: pip, _sva_

Аватара пользователя
MR.Smith
Сообщения: 76
Зарегистрирован: 25 апр 2016, 10:56

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение MR.Smith » 04 май 2016, 15:26

Лашкевич писал(а):Ну он подключается, даже камень находит (читает правильный идентификатор), но почему-то коннект рвется. Попробуйте уменьшить частоту обмена в файле

Код: Выделить всё

VectorIDE\source\openocd\kits\k1921vk01t_jlink\simple_connect.cfg
до, скажем, 900кГц
Может быть, еще попробовать там же закомментировать использование ножки резет.
Все заработало на частоте 800 КГц и ниже.
Reset ножку не трогал.
Спасибо!

Аватара пользователя
Лашкевич
Сообщения: 96
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Contact:

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение Лашкевич » 04 май 2016, 15:30

Вот именно это отличает оригинальный J-link от китайского... У нас с ебея jlink тоже не работал на высокой скорости, а вот уже более дорогой клон работал. У вас тоже не оригинал?
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/

Аватара пользователя
MR.Smith
Сообщения: 76
Зарегистрирован: 25 апр 2016, 10:56

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение MR.Smith » 04 май 2016, 15:35

Лашкевич писал(а):Вот именно это отличает оригинальный J-link от китайского... У нас с ебея jlink тоже не работал на высокой скорости, а вот уже более дорогой клон работал. У вас тоже не оригинал?
Да, у меня китайский клон с eBay.

Аватара пользователя
MR.Smith
Сообщения: 76
Зарегистрирован: 25 апр 2016, 10:56

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение MR.Smith » 04 май 2016, 18:25

Взял за основу пример с миганием светодиодами и добавил кусок кода с float вычислениями.
В настройках проекта включен Float ABI: FP instructions (hard) и выбран FPU Type: fpv4-sp-d16
Получаю ошибку "Example_LED_blinking.elf uses VFP register arguments":
'Building target: Example_LED_blinking.elf'
'Invoking: Cross ARM C Linker'
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -T "C:\Users\Alexander\Documents\Vector_workspace\Test_1\Example_LED_blinking\cmd\build.ld" -nodefaultlibs -nostdlib -Xlinker --gc-sections -Xlinker -L"C:\Users\Alexander\Documents\Vector_workspace\Test_1\Example_LED_blinking\cmd" -Wl,-Map,"Example_LED_blinking.map" -o "Example_LED_blinking.elf" ./src/K1921VK01T_init.o ./src/LED.o ./src/main.o ./src/my_adc.o ./src/my_gpio.o ./src/my_math.o ./src/my_pid.o ./asm/startup_MCP_gcc.o C:/Users/Alexander/Documents/Vector_workspace/Test_1/Example_LED_blinking/lib/libc.a C:/Users/Alexander/Documents/Vector_workspace/Test_1/Example_LED_blinking/lib/libgcc.a C:/Users/Alexander/Documents/Vector_workspace/Test_1/Example_LED_blinking/lib/libm.a
c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: error: Example_LED_blinking.elf uses VFP register arguments, c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-errno.o) does not
c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-errno.o)
c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: error: Example_LED_blinking.elf uses VFP register arguments, c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-impure.o) does not
c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file c:/program files (x86)/vectoride/codebench/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-impure.o)
collect2.exe: error: ld returned 1 exit status
Подскажите пожалуйста, как правильно выставить ключи компиляции для использования только аппаратного FPU?

Сейчас, похоже, что ошибка генерируется из-за того, что в машинном коде после компиляции есть как инструкции для аппаратного FPU, так и код для выполнения операций с плавающей точкой с помощью программных библиотек. Компановка не удается.

Спасибо!

Аватара пользователя
Лашкевич
Сообщения: 96
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Contact:

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение Лашкевич » 04 май 2016, 18:47

Поддержка аппаратной плавающей точки в примерах включена и должна работать. У нас с теми же самыми библиотеками и теми же настройками успешно живет другой проект, где используется аппаратная плавающая точка. Я сейчас попробовал в пример Example_LED_blinking вписать что-то с float, типа сложения одной переменной с другой - все успешно собралось. Именно для этого в комплекте с примерами идет папка lib, где лежат как раз нужные версии библиотек.

В вашем случае по виду линкуемых файлов видно, что там вы подключили много всего. Попробуйте в пустой пример добавить пару строк с float и проверьте, будет ли ругаться. Последовательно добавляя в проект код, попробуйте найти, после использования чего компоновщик не может собрать проект.

Интересно то, что компоновщик ругается на невозможность слинковать с некой внешней библиотекой arm-none-eabi/lib/thumb2/libc.a, лежащей в директории с кросс-компиляторами, при том, что в директории с проектом лежит и передается линковщику своя libc.a. Может быть, вызвалась какая-то интересная функция или операция, которой почему-то нет в той libc.a, что находится в проекте. Попробуйте локализовать это место в коде.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/

Аватара пользователя
MR.Smith
Сообщения: 76
Зарегистрирован: 25 апр 2016, 10:56

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение MR.Smith » 05 май 2016, 11:17

Нашел причину. Компоновщик лезет в стороннюю библиотеку в поисках реализации sqrt и sqrtf для FPU.
Похоже, что в math.h лежит реализация без использования сопроцессора. В libc.a компоновщик не может найти нужную реализацию.
Вся проблема в квадратном корне.

Аватара пользователя
Лашкевич
Сообщения: 96
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Contact:

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение Лашкевич » 05 май 2016, 13:02

Да, подтверждаю, вписал в пример извлечение корня и получил тоже самое. Вылечилось так:
на проекте Properties->C/C++Build->Settings->Cross ARM C Linker->Libraries
там внизу добавляем путь для поиска библиотек, чтобы компоновщик их искал в проекте и не лез никуда в другое место:

Код: Выделить всё

"${workspace_loc:/${ProjName}/lib}"
После этого у меня все собралось.
Но - чтобы код генерировался адекватный, следите за тем, чтобы использовались именно вычисление во float, а не double. По-умолчанию компилятор все норовит переварить как double и залезть для этого в софтвенную реализацию. Например, сложение

Код: Выделить всё

a=a+0.1f;
и

Код: Выделить всё

a=a+0.1;
даст принципиально разные результаты, в последнем случае 0.1 будет трактоваться как double, будет софтвенное сложение в формате double с последующим усечением результата до float : )
Тоже самое с функциями sqrt и sqrtf. Может быть, есть возможность заставить компилятор по-умолчанию воспринимать все вещественные значения как float, надо почитать флаги. Пока сходу не могу сказать, как это сделать. Но при правильном вызове функций код генерируется адекватный, с аппаратными вычислениями.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/

Аватара пользователя
MR.Smith
Сообщения: 76
Зарегистрирован: 25 апр 2016, 10:56

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение MR.Smith » 05 июл 2016, 12:58

Хочу создать новый проект, но в списке шаблонов нет шаблона под К1921ВК01Т и под ARM.
Это только у меня нет шаблонов или их там и не должно быть?
Существует ли пошаговая инструкция по созданию нового проекта с настройками компилятора, путями к библиотекам и т.д.?

Сейчас я просто создаю пустой проект и настраиваю его по аналогии с примерами вручную.

Изображение

Аватара пользователя
Лашкевич
Сообщения: 96
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Contact:

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение Лашкевич » 05 июл 2016, 13:06

Шаблона нету, мы и сами утеряли технологию создания проекта с нуля, слишком там много всего. Рекомендуем создать новый проект из примера путем копирования, сами так делаем. Собственно, примеры и поставляются в качестве "шаблонов", чтобы не писать километровую инструкцию, что куда прописывать...
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/

Аватара пользователя
MR.Smith
Сообщения: 76
Зарегистрирован: 25 апр 2016, 10:56

Re: Eclipse + GCC + OpenOCD: готовая сборка среды

Сообщение MR.Smith » 23 май 2017, 12:41

Здравствуйте!

Подскажите пожалуйста, как прошить микроконтроллер в Vector IDE.
С отладкой все понятно, выполняется она в RAM и после сброса МК запускается программа из ПЗУ.

Я выбрал файл разметки niiet_flash.ld в файле build.ld
В Run Configuration во вкладке Startup я снял галочку Debug in RAM, но к записи программы во Flash это не привело.
Получаю ошибку:
Изображение

Details:
Error in final launch sequence
Failed to execute MI command:
load C:\\Users\\User\\Documents\\Projects\\Vector_workspace\\NIIET\\Example_LED_blinking\\Debug\\Example_LED_blinking.elf
Error message from debugger back end:
Error erasing flash with vFlashErase packet
Failed to execute MI command:
load C:\\Users\\User\\Documents\\Projects\\Vector_workspace\\NIIET\\Example_LED_blinking\\Debug\\Example_LED_blinking.elf
Error message from debugger back end:
Error erasing flash with vFlashErase packet
Error erasing flash with vFlashErase packet


Хотя память все же стирается.

Ответить

Вернуться в «32-разрядные микроконтроллеры на ядре ARM Cortex»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей