Перейти к содержанию
    

STM32, gcc, тип long long

Есть необходимость использование типа 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, в чем может быть проблема, есть идеи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все собирал с опцией --enable-interwork, в чем может быть проблема, есть идеи?

А зачем интерворк кортексу? У него нет Арм и Тамб режимов, только Тамб2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

collect2: ld terminated with signal 11 [segmentation fault]

Явно баг же. Хотя может toolchain плохо собран.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу въехать, почему умножать умножает, а делить не хочет?

Все собирал с опцией --enable-interwork, в чем может быть проблема, есть идеи?

потому что умножение транслируется в команды, а для деления нужна библиотечная функция. У вас похоже не та библиотека используется.

Как тут уже писали --enable-interwork на cortex-m3 не используется.

А вы каким тулчаином пользуетесь?

посмотрите в сторону codesourcery у них сборка gcc свободная и cortex поддерживает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тулчейн самосборный. Может, где и накосячил чего при его сборке, однако же все кроме этого работает... ПОпробую собрать че-ниь посвежее

потому что умножение транслируется в команды, а для деления нужна библиотечная функция.

:07:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

потому что умножение транслируется в команды, а для деления нужна библиотечная функция. У вас похоже не та библиотека используется.

Эммм... Посмотрел даташит от 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...