Jump to content

    
Sign in to follow this  
Krom

STM32, gcc, тип long long

Recommended Posts

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

Share this post


Link to post
Share on other sites
Все собирал с опцией --enable-interwork, в чем может быть проблема, есть идеи?

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

Share this post


Link to post
Share on other sites
Не могу въехать, почему умножать умножает, а делить не хочет?

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

:07:

Share this post


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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this