GCC ARM, Cortex-M3 и float

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Сообщение BorisSPB »

Использую контроллер STM32F103.
Без операций с float все нормально работает. Как только начинается использование плавающей точки программа уходит в HardFault_Handler.
Причем это происходит в самой простейшей операции преобразования uint32_t в float, на вызове __aeabi_ui2f все заканчивается.
В чем причина?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Пытается запустить FPU ? :))) Похоже что то в настройках проекта или либы math /
The library installer contains prebuilt versions of the libraries in the Lib folder.

arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4)
arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4)
arm_cortexM4l_math.lib (Little endian on Cortex-M4)
arm_cortexM4b_math.lib (Big endian on Cortex-M4)
arm_cortexM3l_math.lib (Little endian on Cortex-M3)
arm_cortexM3b_math.lib (Big endian on Cortex-M3)
arm_cortexM0l_math.lib (Little endian on Cortex-M0)
arm_cortexM0b_math.lib (Big endian on Cortex-M3)

The library functions are declared in the public file arm_math.h which is placed in the Include folder. Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single public header file arm_math.h for Cortex-M4/M3/M0 with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. Define the appropriate pre processor MACRO ARM_MATH_CM4 or ARM_MATH_CM3 or ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application.

ЗЫ Гыыыы читай https://my.st.com/public/STe2ecommuniti ... views=2580

Perhaps you should #include <math.h>, and provide the linker with the correct path (-L) to the libraries you need.

I think you need to be looking for libm.a in the lib/thumb2 directory (ie appropriate for the STM32) for your tools.
http://www.network-theory.co.uk/docs/gc ... ro_17.html
ЗЫ2 Ох уж эти гнутые компили, все не как у людей. :)))
Реклама
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Сообщение BorisSPB »

Да, точно, проблема в настройках проекта :?
В самом начале указал неправильный флаг, а затем изменил путь поиска libgcc.a.
Потом флаг поставил правильный, а про libgcc.a забыл.
Все заработало! Спасибо!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула

Сообщение IfoR »

Кстати, у меня аналогичный случай. Только я не разбирался особо что там происходит.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Чт ноя 29, 2012 08:27:22

Сообщение pixar »

Подскажите, пожалуйста - coocox, gcc48, printf("%x.yf" , flt) не выводит?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

pixar, не выводит куда? Почитай хоть для приличия с чем, с какими протоками работает printf
Вкратце - надо переопределять поток вывода printf на USART ...
Реклама
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Чт ноя 29, 2012 08:27:22

Сообщение pixar »

я вроде написал достаточно ясно - встроенный printf из coocox не выводит по спецификатору %f .
fputc настроен куда нужно , вывод по %d без проблем.
Ответить

Вернуться в «ARM»