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

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

2 minutes ago, Михась said:

Можете еще до кучи map файл выложить. Там все эти софтовые dmul и ddiv и всплывут.

Вот

Quote

dsp3d.o(i.dsp3D_generatePerspectiveFovMatrixLH) refers to f2d.o(x$fpl$f2d) for __aeabi_f2d
    dsp3d.o(i.dsp3D_generatePerspectiveFovMatrixLH) refers to dmul.o(x$fpl$dmul) for __aeabi_dmul
    dsp3d.o(i.dsp3D_generatePerspectiveFovMatrixLH) refers to tan.o(i.__hardfp_tan) for __hardfp_tan
    dsp3d.o(i.dsp3D_generatePerspectiveFovMatrixLH) refers to ddiv.o(x$fpl$ddiv) for __aeabi_ddiv
    dsp3d.o(i.dsp3D_generatePerspectiveFovMatrixLH) refers to d2f.o(x$fpl$d2f) for __aeabi_d2f
    dsp3d.o(i.dsp3D_generateRotationMatrix) refers to f2d.o(x$fpl$f2d) for __aeabi_f2d
    dsp3d.o(i.dsp3D_generateRotationMatrix) refers to dmul.o(x$fpl$dmul) for __aeabi_dmul
    dsp3d.o(i.dsp3D_generateRotationMatrix) refers to d2f.o(x$fpl$d2f) for __aeabi_d2f
    dsp3d.o(i.dsp3D_generateRotationMatrix) refers to arm_sin_f32.o(i.arm_sin_f32) for arm_sin_f32
    dsp3d.o(i.dsp3D_generateRotationMatrix) refers to arm_cos_f32.o(i.arm_cos_f32) for arm_cos_f32
    dsp3d.o(i.dsp3D_generateRotationMatrix) refers to daddsub_clz.o(x$fpl$drsb) for __aeabi_drsub

Так как это понимать? Они именно софтовые? dmul и ddiv -символ d означает double?

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


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

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

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

А вот это глубокая ошибка так рассуждать. В вашем проекте уже не "автор библиотеки", а вы отвечаете за результат. Возможно, что "автор библиотеки" сделал что-то такое, о чём вы не знаете. Поэтому вы обязаны переменные типа double (а таковыми являются всякие 7.7 без f в конце) привести к переменным типа float любым доступным способом: ключами компилятора, либо принудительно дописать литуру f в конец, либо взять компилятор, который рабоотает не по стандарту и всё трактует как float.

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

ниже аттач.

Не видно аттача.

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

__aeabi_f2d

Программная конвертация float в dobule. Это то, о чём вам уже говорили)

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

__aeabi_dmul

Программное умножение double.

Остальное по аналогии.

 

Повторяю, вам надо не просто добиться использования FPU, вам нужно исключить работу программным способом с float/double. Ибо в одном месте у вас может работать сопроцессор, а парой строк ниже - вызываться программные процедуры.

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

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


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

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

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

Ну вот, ваш модуль сопроцессора включен, т.е. получает питание и тактовые сигналы, но компилятором не используется. Вместо этого, при наличии железа, всё делается программно.

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


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

19 minutes ago, MrBearManul said:

нужно исключить работу программным способом с float/double

Я правильно понял, что если в мар файле указанные ссылки есть, то у меня однозначно используется программная работа с плавающей точкой? 

Я правильно понял, что показателем эффективности мер, которые нужно предпринять, будет отсутствие этих ссылок в мар файле? 

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


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

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

Я правильно понял, что если в мар файле указанные ссылки есть, то у меня однозначно используется программная работа с плавающей точкой?

Да. Но сделайте поиск по листингам, поищите вызовы этих процедур, чтобы убедиться 100%.

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

Я правильно понял, что показателем эффективности мер, которые нужно предпринять, будет отсутствие этих ссылок в мар файле?

Не совсем. Тут нельзя действовать "тупо в лоб". Если у вас программный расчёт используется где-то один раз в начале программы, в месте, где нет вывода графики, ну, например, вы пересчитываете код АЦП в напряжение, то на графике это не отразится, как вы понимаете. Т.е. единственным критерием является анализ листингов кода графики. Хотя, если вы не используете больше нигде математику с плавающей точкой, то можете действовать только на оснвоании map-файла.

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


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

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

Я правильно понял, что показателем эффективности мер... будет отсутствие этих ссылок в мар файле?

Лидирующим показателем все-таки был, есть и будет листинг.

Но в Вашем случае, в целом, по map-файлу тоже будет понятно.

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


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

6 minutes ago, MrBearManul said:

вот, ваш модуль сопроцессора включен, т.е. получает питание и тактовые сигналы, но компилятором не используется. Вместо этого, при наличии железа, всё делается программно.

А тот ли листинг я смотрел? Вы писали, что нет аттача... Действительно его нет. Но он есть на 3 странице темы в 4 снизу посте. Это тот листинг? В нем нужно было искать команды? 

19 minutes ago, MrBearManul said:

Если у вас программный расчёт используется где-то один раз в начале программы, в месте, где нет вывода графики, ну, например, вы пересчитываете код АЦП в напряжение, то на графике это не отразится, как вы понимает

Ну естественно, я ведь из мар файла привёл только то, что выдано для библиотеки dsp3d

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


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

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

А тот ли листинг я смотрел? В нем нужно было искать команды?

Листинг - это результирующий код на ассемблере. Формируется тулчейном.
В Keil в настройках проекта есть галочка, которая просит систему сборки сделать это.

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


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

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

Но он есть на 3 странице темы в 4 снизу посте.

Простите, у меня другая раскладка форума. Файл должен быть с расширением .lst или .s. А его имя должно совпадать с именем файла с кодом. Выложите ещё разик)

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

Ну естественно, я ведь из мар файла привёл только то, что выдано для библиотеки dsp3d

Тут лучше уточнить. Анамнез это тонкая штука. Тут ошибок быть не должно.

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

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


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

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

Ну естественно, я ведь из мар файла привёл только то, что выдано для библиотеки dsp3d

Не совсем в те строки смотрите.
Это ссылки на внешние символы.
Некоторые из них могут быть далее выброшены, если не используются.
Смотреть надо в MAP-файле чуть ниже, где каждой функции сопоставляется адрес.

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


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

То есть, если я подправлю математическую операцию, как мне советовали (в частности, поставлю символ f), должно уменьшить я количество тактов счётчика DWT,  затрачиваемое на эту операцию, правильно? Я почему спрашиваю - операций этих уйма, хочется не гадать, все ли я отредактировал, а отслеживать эффективность каждого шага... 

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


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

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

Сдался вам этот double precision? Я разве ставил целью получить максимальное быстродействие операция с плавающей точкой? 

Вам уже неоднократно сказали - в той "либе", этот double - ВЕЗДЕ. И именно поэтому у вас скорей всего и тормозит.

Цитата

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

С чего Вы взяли, что там код скомпилён с double precision? И вообще - что тот пример сделан на том коде, который выложен?

Если вам выложат видео на котором калькулятор умножает 2x2 и получает 5, вы тоже будете требовать: "раз там показано, что получается 2x2=5, то покажите мне как получить 5 и не ссылайтесь на законы математики"?

Всё-таки голову на плечах надо иметь и немного думать самому. И если в исходниках написан "double", то это double чтобы там ни показывали на всяких видео.

Как автор скомпилил свой код - вопрос к нему. Возможно он использовал какой-то ключ компилятора, который заставлял его заменить все double на float, а может вручную заменил, а на сайт выложил без замены, а может вообще какою-то другую "либу" использовал. И это вам уже несколько раз сказали - но Вы опять не поняли или проигнорировали. Поэтому и - "трудный случай". :unknw:

Цитата

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

Опять - уже несколько раз вам посоветовали как проверить, что код у вас компилируется с поддержкой FPU, но вы упорно игнорируете все советы и продолжаете "пинать колёса".

Цитата

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

Уверены?  :sarcastic:

Цитата

заглянул

Это они?

Ну наконец-то! Хоть нашли наконец-то листинг! :russian_ru:

Команды эти, но надо искать конкретные места из исходника (либы) и смотреть в какие команды они скомпилились.

Например (как я уже писал): 

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

Какие команды получились для этого?

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

Я правильно понял, что если в мар файле указанные ссылки есть, то у меня однозначно используется программная работа с плавающей точкой? 

Я правильно понял, что показателем эффективности мер, которые нужно предпринять, будет отсутствие этих ссылок в мар файле? 

Не факт. Вопрос - где используется. У вас исходник ведь не из одной этой "либы" состоит. Может такое быть что в либе везде float (аппаратный), а в другом месте исходника - double (в одном месте!).

И тогда функции в .map-файле будут, но "либа" тормозить не будет.

Надо искать конкретные места из "либы" - в какие команды они скомпилировались в .lst-файле.

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

Лидирующим показателем все-таки был, есть и будет листинг.

Твердили это автору много сообщений подряд, а он упорно игнорировал.  :unknw:

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


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

8 часов назад, Salamander сказал:

Я почему спрашиваю - операций этих уйма, хочется не гадать, все ли я отредактировал, а отслеживать эффективность каждого шага... 

Так и придётся - "всё редактировать и отслеживать", перетряхнуть всю эту "либу". Именно поэтому я ещё в самом начале треда написал - "либа - го***".

Кроме того - как уже заметил ув. GenaSPB: в коде есть некорректная работа с массивами/указателями (и кто его знает какие ещё баги), а значит даже если сделаете все эти исправления, не факт что она у вас заработает правильно.

Вот как должна выглядеть работа с аппаратным FPU в листинге:

   float a = (float)id;                    
0xEEF8 0x0AC0      VCVT.F32.S32 S1,S0      
   id = 0;                                 
0x2000             MOVS     R0,#+0         
   if ((a = flux.lim - a * a) > 0) {       
0xED94 0x0A08      VLDR     S0,[R4, #+32]  
0xEE00 0x0AE0      VMLS.F32 S0,S1,S1       
0xEEF0 0x0A40      VMOV.F32 S1,S0          
0xEEF5 0x0A40      VCMP.F32 S1,#0.0        
0xEEF1 0xFA10      FMSTAT                  
0xDD0F             BLE.N    ??FocAct_3

все команды, начинающиеся на 'V' здесь - команды FPU одинарной точности. Если у вас скомпилилось с эмуляцией FPU, то вместо них будут стоять вызовы функций эмуляции (BL ...).

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


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

6 hours ago, jcxz said:

Вам уже неоднократно сказали - в той "либе", этот double - ВЕЗДЕ

Это об этом мне компилятор говорит?

..\Middlewares\Third_Party\dsp3D\src\dsp3D.c(233): warning:  #1035-D: single-precision operand implicitly converted to double-precision

 

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


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

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

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

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

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

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

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

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

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

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