Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32, gcc, тип long long
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Krom
Есть необходимость использование типа long long (64 бита). Возникает проблема при попытке деления (сложение, вычитание, умножение выполняются нормально), а при попытке использовать деление на этапе сборки проекта выдается следующее сообщение:

collect2: ld terminated with signal 11 [Segmentation fault]
/usr/local/arm/lib/gcc/arm-elf/4.3.1/../../../../arm-elf/bin/ld: /usr/local/arm/lib/gcc/arm-elf/4.3.1/libgcc.a(_divdi3.o)(__divdi3): warning: interworking not enabled.
first occurrence: main.o: thumb call to arm
/usr/local/arm/lib/gcc/arm-elf/4.3.1/../../../../arm-elf/bin/ld: BFD (GNU Binutils) 2.18.0.20080103 assertion fail /usr/local/arm/src/binutils-2.18.1/bfd/elf32-arm.c:6538
main.o: In function `main':
/home/user/Project/STM32/P150/main.c:171: dangerous relocation: make: *** [main.elf] Ошибка 1


Пробовал собирать с опцией -mthumb-interwork -результат тот же. И при использовании функции lldiv тоже самое. Не могу въехать, почему умножать умножает, а делить не хочет?
Все собирал с опцией --enable-interwork, в чем может быть проблема, есть идеи?
sonycman
Цитата(Krom @ Jun 27 2009, 14:37) *
Все собирал с опцией --enable-interwork, в чем может быть проблема, есть идеи?

А зачем интерворк кортексу? У него нет Арм и Тамб режимов, только Тамб2.
amaora
Цитата
collect2: ld terminated with signal 11 [Segmentation fault]

Явно баг же. Хотя может toolchain плохо собран.
KRS
Цитата(Krom @ Jun 27 2009, 14:37) *
Не могу въехать, почему умножать умножает, а делить не хочет?
Все собирал с опцией --enable-interwork, в чем может быть проблема, есть идеи?

потому что умножение транслируется в команды, а для деления нужна библиотечная функция. У вас похоже не та библиотека используется.
Как тут уже писали --enable-interwork на cortex-m3 не используется.
А вы каким тулчаином пользуетесь?
посмотрите в сторону codesourcery у них сборка gcc свободная и cortex поддерживает!
Krom
Тулчейн самосборный. Может, где и накосячил чего при его сборке, однако же все кроме этого работает... ПОпробую собрать че-ниь посвежее
Цитата(KRS @ Jun 27 2009, 23:01) *
потому что умножение транслируется в команды, а для деления нужна библиотечная функция.

07.gif
Altemir
Цитата(KRS @ Jun 27 2009, 23:01) *
потому что умножение транслируется в команды, а для деления нужна библиотечная функция. У вас похоже не та библиотека используется.

Эммм... Посмотрел даташит от ARM:
ARM DDI 0337G
Cortex-M3 Technical Reference Manual
26 June 2008 G Non-Confidential First Release for r2p0

На странице 2 написано:
Цитата
Hardware divide instructions, SDIV and UDIV (Thumb 32-bit instructions).


Но, применительно к long-long, думаю, всё-равно библиотека потребуется.
Может, я чего не то смотрю? Поправьте, пожалуйста.

То же самое касается и Тамб режима, о котором упоминал sonycman:
Цитата
A Thumb instruction set subset, defined in the ARMv7-M Architecture Reference Manual.


Или есть какая-то другая реализация ядра, используемая у STM?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.