Как использовать расширение типов фиксированных точек GCC на ARM Cortex-M?

Я использую ARM Cortex-M3 и Cortex-M4. Я хочу использовать GCC расширение с фиксированной точкой. Я использую цепочку инструментов вызова. Следующая строка кода

_Fract f = 0.1;

выдает следующую ошибку компиляции:

error: fixed-point types not supported for this target

Действительно ли GCC не поддерживает типы фиксированной точки для Cortex-M3/M4, или я что-то здесь не вижу?

Ответ 1

Только для записи я отвечу на свой вопрос.

TL; DR: поддерживается расширение типов фиксированных точек для архитектуры ARM Cortex-M/R во встроенной ветки gcc (версия 4.6 и более поздняя). Инструментальная цепочка на основе этой ветки gcc находится здесь.

Длинный ответ:

На момент написания, summon-arm-toolchain загружается по умолчанию linaro-gcc-4.5-2011.02 (или, альтернативно, gcc-4.5.2). Он не включил по умолчанию расширение типов фиксированной точки. Я попытался добавить параметр --enable-fixed-point в configure, но я получил ошибку компиляции, описанную в этом bug. Я попытался использовать более позднюю версию (linaro-) gcc, но в вызове-toolchain проблемы возникла проблема с применением собственного gcc-исправления для этой более новой версии. Я также попытался использовать ветвь dev этой инструментальной цепочки (которая использует linaro-gcc-4.6-2011.10) без успеха. Похоже, на данный момент расширение ARC Cortex-M/R не поддерживается линией-gcc, а также основной ветвью gcc.

Затем я попробовал gcc-arm-embedded toolchain, который основан на встроенной ветки gcc. Я смог скомпилировать выборочную программу типов фиксированной точки без проблем, для целей ARM Cortex-M3 и Cortex-M4. Поддержка этого расширения для Cortex-M/R была добавлена ​​в конце 2011 года, как можно увидеть на этот поток.

Ответ 2

Согласно GCC Wiki, вы можете включить расширения с фиксированной точкой, передав --enable-fixed-point в качестве параметра GCC при его настройке.

Далее, согласно комментарию по этому gcc bug и это один.

поддержка фиксированной точки поддерживается только в настоящее время для цели MIPS.