STM32F4XX

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
Post Reply
tetraa
Posts: 41
Joined: 24 Sep 2011, 01:01
Location: киев

STM32F4XX

Post by tetraa »

Здравствуйте, проблема вычисления корня квадратного на STM32F407, не хочет использовать инструкцию FPU - VSQRT.
Раньше была проблема что любая инструкция FPU не использовалась.
пример IAR 6.3
volatile float x;
volatile float rez;

rez = 0.1666666666666666666666666666666666666666666 * x;

результат компиляции
перевод x в тип double, умножение double x на double константу (естественно через програмные библеотеки IARа),
приведение результата в float.
в результате +100500 инструкций и командных тактов.

Решение довольно простое , объявить константу флоатом (написать в конце f)
rez = 0.1666666666666666666666666666666666666666666f * x;

результат компиляции 2 команды
VMOV r0 *** // загрузка float константы в регистр
VMUL r2, r1, r0 // умножение константы в r0 на x в r1.

но в случае с корнем квадратным всё вроде правильно
volatile float x;
volatile float rez;
rex = sqrt(x);
типы данных float но комплятор не использует VSQRT, он делает какоето преобразование (наверное в double ) и вызывает стандартую функцию sqrt. тоже +100500 тактов. Кто знает почему так происходит и как вызвать корень через FPU? В нете ничего не нашёл. ассемблерные вставки тоже не дали результата (не могу передать параметры в регистры)
Несколько недель пытаюсь разобраться, результата 0. подскажите кто что знает.
User avatar
BSVi
Адепт
Posts: 3577
Joined: 15 Mar 2011, 12:32
Location: Киев

Re: STM32F4XX

Post by BSVi »

Используй sqrtf вместо sqrt.
tetraa
Posts: 41
Joined: 24 Sep 2011, 01:01
Location: киев

Re: STM32F4XX

Post by tetraa »

rex = sqrtf(x); так?
User avatar
BSVi
Адепт
Posts: 3577
Joined: 15 Mar 2011, 12:32
Location: Киев

Re: STM32F4XX

Post by BSVi »

А может быть как-то по-другому?
tetraa
Posts: 41
Joined: 24 Sep 2011, 01:01
Location: киев

Re: STM32F4XX

Post by tetraa »

Всё я понял ! так мы говорим компилятору что хотим получить корень квадратный из флоата?
User avatar
BSVi
Адепт
Posts: 3577
Joined: 15 Mar 2011, 12:32
Location: Киев

Re: STM32F4XX

Post by BSVi »

Да ничего мы не говорим, просто вызываем другую функцию. Простой sqrt работает с double. Можешь посмотреть math.h.
tetraa
Posts: 41
Joined: 24 Sep 2011, 01:01
Location: киев

Re: STM32F4XX

Post by tetraa »

Всё понял. Спасибо BSVi, Я чёто не догадался, так и знал что оно в double переводит, когда на дезасемблер смотрел :) чутка тупит иар ИМХО. когда я вместо char пихал const char, то он ругался, а тут тихонько себе молчит.
Post Reply