![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/534/2fc/f34/5342fcf34d681e69b11f4fd5913816ce.png)
В последнее время появилось много микроконтроллеров на ядрах ARM Cortex-M*, которые поддерживают аппаратную реализацию математики плавающей запятой (FPU). В основном FPU работают с одиночной точностью (float) и её вполне достаточно для работы с сигналами, полученными с АЦП. FPU позволяет забыть о проблемах дискретизации и проблемах переполнения целочисленных вычислений. FPU быстр - все математические операции с одиночными float
, кроме деления и взятия корня, занимают на Cortex-M4F один такт. Поэтому после перехода на Cortex-M4F мы вздохнули свободно и стали писать математику на float
. Как же мы удивились, найдя в скомпилированном коде математические операции над double
с программной, очень медленной эмуляцией.
В статье рассказывается, как обнаружить и исправить присутствие double в прошивках, где ядро аппаратно поддерживает тип float
, но не поддерживает double
.
Работа ведётся в среде IAR Embedded Workbench на примере реального кода на языке Си.