Перейти к содержанию
    

Как наибыстрейше вывести на экран точку?

Just now, GenaSPB said:

аппаратный double есть только в F767. 

но 3д библиотека прекрасно работает и на F746, каким бы в нем ни был FPU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, GenaSPB сказал:

Неравильно поняли. ПРосто сравнить с 0 а не 0.0

Там и без сравнений полно другого г*. См. выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

--cpu=Cortex-M7.fp.sp

наверное использует... Читайте описание ключей вашего компидятора

3 minutes ago, jcxz said:

Там и без сравнений полно другого г*. См. выше.

Выход за границы массивов и мне ненравится

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, GenaSPB said:

наверное использует... Читайте описание ключей вашего компидятора

Да..... та опция в ниспадающем меню, что я вам выкладывал выше, как раз этот ключ и включает. Получается, что работает у меня FPU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как проверить, скажем так, не состояние FPU (включен/выключен), а эффективность? НУ к примеру, можно ли запустить некую стандартную функцию, которая при включенном FPU занимает определенное количество тактов, меньшее чем без оного?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, Salamander сказал:

А как проверить, скажем так, не состояние FPU (включен/выключен), а эффективность? НУ к примеру, можно ли запустить некую стандартную функцию, которая при включенном FPU занимает определенное количество тактов, меньшее чем без оного?

Помимо включения самого Single FPU, нужно и работать с переменными типа float, и  математические операции делать с float (в частности добавлять в конце чисел букву 'f'), а не double. 

centerPoint[0] = (v1[3] + v2[3] + v3[3]) / 3.0f;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, ivan24190 said:

centerPoint

А если она объявлена как float32_t centerPoint[3] ?

разве это ничего не значит?

Да и потом - библиотека не моя, автор ее запускал в том виде, в котором она выложена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, Salamander сказал:

А если она объявлена как float32_t centerPoint[3] ?

разве это ничего не значит?

Да и потом - библиотека не моя, автор ее запускал в том виде, в котором она выложена.

Да пожалуйста, но у вас операция деления на 3.0, а это по умолчанию double. Поэтому компилятор сначала преобразует все числа в double, затем выполнит всю арифметику в double и только в конце перед присваиванием преобразует во float. Поэтому нужно писать 3.0f, тогда все операции будут выполняться с float.

Либо, как советовали выше, искать флаг компилятора, чтобы все вычисления с числами с плавающей точкой проводились во float.

Изменено пользователем ivan24190

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, к примеру


float32_t matrix_view[16] = 			{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_projection[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_rotation[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_translation[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_world[16] = 			{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_worldView[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_transform[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_transformhelper[16] = 	{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};

везде нужно добавить f???

Мда...

Я все же, с надеждой повторю мою нижайшую просьбу - владельцам какой-нить платы с STM32F746 запустить библиотеку у себя.  Пока откликнулся только GenaSPB (спасибо ему), но у него STM32MP157.

Подключается в два счета, инструкцию я выше давал.

Не обязательно с дисплеем, можно просто посчитать, сколько тактов уходит на расчет одной точки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, Salamander сказал:

То есть, к примеру


float32_t matrix_view[16] = 			{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_projection[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_rotation[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_translation[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_world[16] = 			{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_worldView[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_transform[16] = 		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
float32_t matrix_transformhelper[16] = 	{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};

везде нужно добавить f???

Если float32_t здесь действительно float, то касательно этих массивов делать ничего не нужно, тут приведение типа произойдет автоматически. Но на места арифметики нужно обратить внимание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Salamander сказал:

Да..... та опция в ниспадающем меню, что я вам выкладывал выше, как раз этот ключ и включает. Получается, что работает у меня FPU

Интересно - как он у вас может работать, если в вашем МК его нет? :biggrin:

Я имею в виду - double precision FPU.

2 часа назад, ivan24190 сказал:

Помимо включения самого Single FPU, нужно и работать с переменными типа float, и  математические операции делать с float (в частности добавлять в конце чисел букву 'f'), а не double. 


centerPoint[0] = (v1[3] + v2[3] + v3[3]) / 3.0f;

Уже говорили. И не раз. ТС похоже не догоняет.  :unknw:

Да, и лучше писать:

centerPoint[0] = (v1[3] + v2[3] + v3[3]) * (1.f/3);

 

2 часа назад, Salamander сказал:

Я добавил, не везде конечно, но прироста никакого....

И колёса пинал и стекло протирал..... а в листинг так и не заглянул. Да уж, трудный случай.... :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Salamander сказал:

Я добавил, не везде конечно, но прироста никакого....

Можно пойти от обратного: поищите в листинге вызовы стандартных подпрограмм для софтовой работы с float и double (именно и для тех и для этих). Если вы всё сделали правильно, их быть не должно от слова совсем. Как называются эти подпрограммы смотрите в документации на свой компилятор. А везде, где используется ваша математика долны быть команды FPU. Список мнемоник можете посмотреть в документации на ядро.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, jcxz said:

ТС похоже не догоняет.

 

5 hours ago, jcxz said:

Да уж, трудный случай...

Давайте не будем переходить на подобие оскорблений?

Вы меня тоже не слышите.

Как например:

5 hours ago, jcxz said:

как он у вас может работать, если в вашем МК его нет? :biggrin:

Я имею в виду - double precision FPU.

Сдался вам этот double precision? Я разве ставил целью получить максимальное быстродействие операция с плавающей точкой?  В который раз сошлюсь на неоднократно выкладывавшееся мной видео, где на не имеющем double precision STM32F746 фигурка головы обезьяны вращается с вполне приличной скоростью. Вот эту скорость я и хочу повторить.

Single precision у меня есть? Есть вот от него давайте и будем отталкисваться.

5 hours ago, jcxz said:

математические операции делать с float (в частности добавлять в конце чисел букву 'f'), а не double. 

Автор библиотеки этого не делал и она у него нормально работала

5 hours ago, jcxz said:

а в листинг так и не заглянул.

заглянул

Quote

А везде, где используется ваша математика долны быть команды FPU. Список мнемоник можете посмотреть в документации на ядро.

Это они?

ExUsT5z7.png?download=1&name=%D0%A1%D0%B

 

ниже аттач.  файл с расширением lst. Это листинг? А по содержимому? Поиск в нем не дает положительного результата для вышеуказанных функций.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можете еще до кучи map файл выложить. Там все эти софтовые dmul и ddiv и всплывут. В общем, в любом случае есть смысл добиться чтобы все математика работала с float FPU. Просто надо внимательно весь код просмотреть и полностью убрать использование даблов.

Изменено пользователем Михась

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...