Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Тема закрыта

Re: In vino veritas

Сб июн 30, 2018 11:37:50

Пример исходника на чистом ассемблере для АРМ (а не распечатку Сишного листинга) приложите.
:wink:
Я понимаю, что под Си это не вопрос в принципе.

Код:
float sin(float x)   // -Pi..Pi
{
    float x2 = x * x;
    float p7 = -0.00000002f * x2 + 0.000002522f;
    float p5 = p7 * x2 - 0.000173505f;
    float p3 = p5 * x2 + 0.006620879f;
    float p1 = p3 * x2 - 0.101321180f;
    return (x - Pi) * (x + Pi) * p1 * x;
}

Спойлер
Код:
vldr s14, [sp, #28]
vldr s7, [pc, #636]
vldr s8, [pc, #636]
vldr s9, [pc, #636]
vldr s12, [pc, #636]
vldr s10, [pc, #636]
vldr s15, [pc, #636]
vmul.f32 s13, s14, s14
vsub.f32 s11, s14, s12
vfma.f32 s8, s13, s7
vadd.f32 s12, s14, s12
vfma.f32 s9, s13, s8
vmul.f32 s12, s11, s12
vmov.f32 s11, s10
vfma.f32 s11, s13, s9
vfma.f32 s15, s13, s11
vmul.f32 s15, s15, s12
vmul.f32 s15, s15, s14
vstr s15, [sp, #24]


На пальцах можно объяснить как это работает? Из теории попалось только ряд Тейлора, в виде степенных рядов.

Конкретно в моем примере используются многочлены Чебышева, объясняют пусть математики, ты ведь хотел понять как это реализовать в железе, следовательно нужно понять лишь как в нем реализовать несколько математических операций.

Re: In vino veritas

Сб июн 30, 2018 11:41:00

Но это же Си, а не ассемблер - я уже про то говорил, что спрашивающего интересует АССЕМБЛЕРНОЕ воплощение.
И не на математическом сопроцессоре, а "стандартным арсеналом" типового 8-разрядного МК.
8)

Re: In vino veritas

Сб июн 30, 2018 11:47:51

Но это же Си, а не ассемблер - я уже про то говорил, что спрашивающего интересует АССЕМБЛЕРНОЕ воплощение.

Чем спрашивающему листинг на ассме не угодил учитывая, что под ARM с FPU он все равно ничего писать не будет?

И не на математическом сопроцессоре, а "стандартным арсеналом" типового 8-разрядного МК.

Уважаемый, следовало бы изначально изъясняться яснее, потому как исходник на чистом ассемблере для 32-х битного АРМ и типового 8-разрядного МК - это в принципе несопоставимые вещи :)

Re: In vino veritas

Сб июн 30, 2018 11:54:24

BOB51 писал(а):И не на математическом сопроцессоре, а "стандартным арсеналом" типового 8-разрядного МК.
Вы же просили.
BOB51 писал(а):Пример исходника на чистом ассемблере для АРМ
Что попросили, то и дали. В STM32F4 и не только есть математический сопроцессор, для чисел с плавающей точкой.

Re: In vino veritas

Сб июн 30, 2018 12:02:09

Ясненько - сунули команды математического сопроцессора и рады.
8)
Ох уж та реклама АРМов.
А ближе к примитиву, что человеку нужно?
Таки проще табличного варианта похоже и не предвидится.
:sleep:

Re: In vino veritas

Сб июн 30, 2018 12:09:57

Ясненько - сунули команды математического сопроцессора и рады.
Ох уж та реклама АРМов.

Ну да, FPU+DSP, $2.8 штучка, десяток по $2.2.

Re: In vino veritas

Сб июн 30, 2018 12:33:43

Reflector писал(а):

Спойлер
Код:
float sin(float x)   // -Pi..Pi
{
    float x2 = x * x;
    float p7 = -0.00000002f * x2 + 0.000002522f;
    float p5 = p7 * x2 - 0.000173505f;
    float p3 = p5 * x2 + 0.006620879f;
    float p1 = p3 * x2 - 0.101321180f;
    return (x - Pi) * (x + Pi) * p1 * x;
}


Ладно с ней с матиматикой, а как работает этот код?
Reflector писал(а):Чем спрашивающему листинг на ассме не угодил учитывая, что под ARM с FPU он все равно ничего писать не будет?

Я писать ни чего не буду, мне интересно именно уровень матиматики, единиц и нолей.

Re: In vino veritas

Сб июн 30, 2018 12:55:36

BOB51 писал(а):Ясненько - сунули команды математического сопроцессора и рады.
Почему сунули? Ведь написали же.
Reflector писал(а):6 сложений, 7 умножений, на STM32 с FPU синус тактов за 30 считает с неплохой точностью.
FPU.

BOB51 писал(а):Ох уж та реклама АРМов.
Это все равно что в начале 90-тых, имея Радио-86РК писать "Ох уже эта реклама Pentium 1".
В STM32 есть математический сопроцессор и не только он, а в 8-ми битниках его нет. Вам нужно решить, пользоваться новым или устаревшим.

BOB51 писал(а):Таки проще табличного варианта похоже и не предвидится.
Для тех МК под которые вы пишите, может быть, а для современных есть другие варианты.

Re: In vino veritas

Сб июн 30, 2018 13:03:48

Ладно с ней с матиматикой, а как работает этот код?

Я не знаю что объяснять, если абстрагироваться от математического обоснования, то что останется?

Re: In vino veritas

Сб июн 30, 2018 13:17:40

:facepalm:

Re: In vino veritas

Сб июн 30, 2018 13:19:17

Я писать ни чего не буду, мне интересно именно уровень матиматики, единиц и нолей.


Изображение

Re: In vino veritas

Сб июн 30, 2018 13:49:51

Reflector, хотел уточнить что такое в коде "х" , а что "Рi".

Re: In vino veritas

Сб июн 30, 2018 13:56:29

x - переменная float, аргумент функции
Pi - константа https://ru.wikipedia.org/wiki/%D0%9F%D0 ... 0%BB%D0%BE)

но вам это не поможет...

Re: In vino veritas

Сб июн 30, 2018 14:10:17

х - это градусы угла?
И почему не поможет?

Re: In vino veritas

Сб июн 30, 2018 14:20:53

х - это градусы угла?

Нет, аргумент там в радианах.

Re: In vino veritas

Сб июн 30, 2018 14:40:54

Работает! :)) :beer:


Изображение

Re: In vino veritas

Сб июн 30, 2018 15:01:56

И почему не поможет?

https://electronix.ru/forum/index.php?showtopic=65613


Ну и по поводу ваших скриншотов

Re: In vino veritas

Сб июн 30, 2018 15:49:59

Попробую в железе, там видно будет. Вроде не сильно страшно всё.
Про скриншоты, так быстрей, пишу с планшета, а компьютер рабочий, к интернету не подключен.

Re: In vino veritas

Сб июн 30, 2018 17:55:10

Проверил без FPU, на Cortex-M3, где есть умножение 32 * 32 -> 64, всего в 2 раза медленнее, но они и сами в 2 раза дешевле.

Re: In vino veritas

Сб июн 30, 2018 18:59:16

На 8-ми битниках особенно где нет аппаратной поддержки умножения и деления (PIC16 к примеру), будет очень медленно.
Тема закрыта