Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: codesource флаги для cortexm4
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
sergey sva
Указываю ключ mcpu-cortexm4, как правильнее настроить fpu hardware или software ?
У cortexm4 встроенный fpu если задать soft то аппаратный fpu не будет использоваться?
В коде используется библиотека math будут функции оптимизироваться под fpu?
Не совсем понимаю объясните плз.
Aaron
Взято из readme к тулчейну:
Код
|----------|--------------------------------------------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4                    | armv7e-m |
|(No FP)   |--------------------------------------------|          |
|          | -mthumb -march=armv7e-m                    |          |
|----------|--------------------------------------------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=softfp | armv7e-m |
|(Soft FP) | -mfpu=fpv4-sp-d16                          | /softfp  |
|          |--------------------------------------------|          |
|          | -mthumb -march=armv7e-m -mfloat-abi=softfp |          |
|          | -mfpu=fpv4-sp-d16                          |          |
|----------|--------------------------------------------|----------|
|Cortex-M4 | -mthumb -mcpu=cortex-m4 -mfloat-abi=hard   | armv7e-m |
|(Hard FP) | -mfpu=fpv4-sp-d16                          | /fpu     |
|          |--------------------------------------------|          |
|          | -mthumb -march=armv7e-m -mfloat-abi=hard   |          |
|          | -mfpu=fpv4-sp-d16                          |          |

По поводу использования прекомпилированных библиотек: в зависимости от ключей из таблицы линкер должен сам подхватывать соответствующую стандартную библиотеку.
Аналогично, DSP библиотеки есть прекомпилированные - и надо просто подключать нужную.
arm_cortexM4l_math.lib - No FP
arm_cortexM4lf_math.lib - Soft FP
Если нужен Hard FP, то библиотеку надо компилировать самому из исходников (по крайней мере у меня нету под hard FP либы готовой).

По поводу использования soft/hard - вы не совсем верно понимаете. Под этими словами подразумевается способ обращения к регистрам FPU. Могу немного ошибаться в теории, но примерно это означает следующее: soft FP будет использовать регистры общего назначения для доступа к FPU, а hard FP - специально выделенные для этого регистры. В обсновном в интернете и в примерах почему-то используют soft FP, сравнения производительности я не делал между этими режимами, так что подробнее прокомментировать не смогу.
neiver
soft/hard отличаются только способом передачи float аргументов и возвратом значений в/из функции. В случае soft FP аргументы передаются также как и целочисленные - через регистры и стек если регистров не хватило, результат возвращается в r0. При этом вычисления всё равно идут в регистрах мат сопроцессора. Соответственно параметры функции надо скопировать из РОН в регистры сопроцессора, потом обратно.
Hard FP - все float переменные передаются непосредственно в регистрах сопроцессора.
Hard FP чуток побыстрее. У меня в текущем проекте используется много метематики с плавающей точкой, общая разница между soft/hard была около 10%. Для меня это было критично и определило выбор Hard FP.
Soft FP зато совместим с либами скомпилированными без использования мат. сопроцессора.
Aaron
О, хорошее объяснение sm.gif Надо тоже взять на заметку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.