#floating-point #arm #embedded #clang #precision
#с плавающей запятой #arm #встроенный #лязг #точность
Вопрос:
В нашем встроенном проекте, предназначенном для ядер ARM Cortex M *, мы используем набор инструментов на основе ARM clang (v6). Мы используем float
type для нашей математики с плавающей запятой. Пытаясь минимизировать занимаемый объем, мы обнаружили, что некоторое пространство занимают ненужные double
<-> float
преобразования.
Источником некоторых из этих преобразований было использование литералов, не включающих f
спецификатор (например, использовать 12.34
вместо 12.34f
). Чтобы устранить это, я ищу опцию компилятора, которая использует float
тип по умолчанию. Просматривая документацию компилятора и общую справку clang, я не смог найти ни одного.
Есть ли какой-либо параметр (командный параметр, прагма, атрибут и т.д.), Который может достичь этой цели?
Комментарии:
1. Похоже, решение состоит в том, чтобы исправить ошибочный код. Вы просто не должны смешивать двойные литералы с плавающими значениями, и это не вина цепочки инструментов. То же самое касается вызовов функций, всегда есть разные функции для double и float.
2. Вы можете сканировать свои файлы map на предмет двойных связанных вызовов и обрезать их таким образом. Мы сделали это в системах с поддержкой soft float (т. Е. без аппаратного обеспечения), чтобы предотвратить массовую нагрузку на процессор, вызванную плавающими значениями.
3. @MichaelDorgan — Мы уже сделали это и тщательно преобразовали литералы в явные числа с плавающей запятой. Вопрос касался дополнительного уровня защиты и будущей проверки.
4. Вы всегда можете создать скрипт на Python для автоматического сканирования и помечать ошибки. Не совсем то доказательство будущего, которое вы хотите, но, по крайней мере, доказательство «сейчас» для многих nows.
5. @Lundin » всегда есть разные функции для double и float». -> Печать
float
, похоже, является исключением.
Ответ №1:
-fsingle-precision-constant — это то, что вы ищете, хотя мое личное мнение таково, что вам следует избегать этого и использовать явное приведение.
Комментарии:
1. Спасибо. Я не могу найти эту опцию в документации armclang, поэтому я предполагаю, что она там не поддерживается.
2. Фактически, поиск дал этот пост: lists.llvm.org/pipermail/llvm-dev/2015-July/088040.html Это похоже на опцию GCC.
3. Вместо этого Clang использует константу -cl-single-precision-constant. В настоящее время у меня не установлен ARM clang, но с самим clang флаг работает. Смотрите здесь .
4. Похоже, armclang не поддерживает эту опцию.